PHP Manual
Stig Sæther Bakken Alexander Aulbach Egon Schmid Jim Winstead Lars Torben Wilson Rasmus Lerdorf Zeev Suraski
Edited by
Stig Sæther Bakken Egon Schmid
PHP Manual by Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, and Zeev Suraski by Edited by Stig Sæther Bakken Edited by Egon Schmid
Published Mon Jun 12 22:46:08 EEST 2000 Copyright © 1997, 1998, 1999, 2000 by the PHP Documentation Group Copyright This manual is © Copyright 1997, 1998, 1999, 2000 by the PHP Documentation Group. The members of this group are listed on the front page of this manual. This manual can be redistributed under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
Table of Contents
Preface ............................................................................................................................................... 47 About this Manual..................................................................................................................... 47 I. Getting Started .............................................................................................................................. 48 1. Introduction ........................................................................................................................... 49 What is PHP?................................................................................................................... 49 What can PHP do?........................................................................................................... 49 A brief history of PHP..................................................................................................... 50 2. Installation............................................................................................................................. 51 Downloading the latest version ....................................................................................... 51 Installation on UNIX systems ......................................................................................... 51 Quick Installation Instructions (Apache Module Version) .................................... 51 Configuration ......................................................................................................... 52 Apache module ...................................................................................................... 52 fhttpd module ......................................................................................................... 52 CGI version............................................................................................................ 53 Database Support Options...................................................................................... 53 Adabas D ...................................................................................................... 53 dBase ............................................................................................................ 53 filePro ........................................................................................................... 53 mSQL ........................................................................................................... 53 MySQL......................................................................................................... 54 iODBC.......................................................................................................... 54 OpenLink ODBC.......................................................................................... 54 Oracle ........................................................................................................... 55 PostgreSQL .................................................................................................. 55 Solid ............................................................................................................. 55 Sybase........................................................................................................... 55 Sybase-CT .................................................................................................... 55 Velocis .......................................................................................................... 56 A custom ODBC library............................................................................... 56 Unified ODBC.............................................................................................. 56 LDAP............................................................................................................ 57 Other configure options.......................................................................................... 57 --with-mcrypt=DIR...................................................................................... 57 --enable-sysvsem .......................................................................................... 57 --enable-sysvshm.......................................................................................... 57 --with-xml..................................................................................................... 57 --enable-maintainer-mode ............................................................................ 58 --with-system-regex...................................................................................... 58 --with-config-file-path .................................................................................. 58 --with-exec-dir.............................................................................................. 58
4
--enable-debug.............................................................................................. 58 --enable-safe-mode....................................................................................... 59 --enable-track-vars........................................................................................ 59 --enable-magic-quotes .................................................................................. 59 --enable-debugger......................................................................................... 59 --enable-discard-path.................................................................................... 59 --enable-bcmath............................................................................................ 60 --enable-force-cgi-redirect ........................................................................... 60 --disable-short-tags....................................................................................... 60 --enable-url-includes .................................................................................... 61 --disable-syntax-hl........................................................................................ 61 CPPFLAGS and LDFLAGS......................................................................... 61 Building ................................................................................................................. 61 Testing.................................................................................................................... 61 Benchmarking ........................................................................................................ 61 Installation on Windows 95/98/NT systems.................................................................... 62 General Installation Steps ...................................................................................... 62 Windows 95/98/NT and PWS/IIS 3....................................................................... 63 Windows NT and IIS 4 .......................................................................................... 64 Windows 9x/NT and Apache 1.3.x ........................................................................ 64 Omni HTTPd 2.0b1 for Windows.......................................................................... 65 PHP Modules ......................................................................................................... 65 Problems? ........................................................................................................................ 66 Read the FAQ ......................................................................................................... 66 Bug reports............................................................................................................. 66 Other problems....................................................................................................... 66 3. Configuration ........................................................................................................................ 67 The configuration file ...................................................................................................... 67 General Configuration Directives .......................................................................... 67 Mail Configuration Directives ............................................................................... 71 Safe Mode Configuration Directives...................................................................... 72 Debugger Configuration Directives ....................................................................... 72 Extension Loading Directives................................................................................ 72 MySQL Configuration Directives.......................................................................... 73 mSQL Configuration Directives ............................................................................ 73 Postgres Configuration Directives ......................................................................... 73 Sybase Configuration Directives............................................................................ 74 Sybase-CT Configuration Directives ..................................................................... 74 Informix Configuration Directives......................................................................... 75 BC Math Configuration Directives ........................................................................ 76 Browser Capability Configuration Directives........................................................ 76 Unified ODBC Configuration Directives............................................................... 76 4. Security ................................................................................................................................. 78 CGI binary ....................................................................................................................... 78
5
Possible attacks ...................................................................................................... 78 Case 1: only public files served ............................................................................. 79 Case 2: using --enable-force-cgi-redirect............................................................... 79 Case 3: setting doc_root or user_dir ...................................................................... 79 Case 4: PHP parser outside of web tree ................................................................. 80 Apache module................................................................................................................ 80 II. Language Reference .................................................................................................................... 82 5. Basic syntax .......................................................................................................................... 83 Escaping from HTML ..................................................................................................... 83 Instruction separation ...................................................................................................... 83 Comments........................................................................................................................ 84 6. Types ..................................................................................................................................... 85 Integers ............................................................................................................................ 85 Floating point numbers.................................................................................................... 85 Strings.............................................................................................................................. 85 String conversion ................................................................................................... 87 Arrays .............................................................................................................................. 88 Single Dimension Arrays....................................................................................... 88 Multi-Dimensional Arrays ..................................................................................... 89 Objects............................................................................................................................. 91 Object Initialization ............................................................................................... 91 Type Juggling .................................................................................................................. 91 Type Casting .......................................................................................................... 92 7. Variables................................................................................................................................ 95 Basics............................................................................................................................... 95 Predefined variables......................................................................................................... 96 Apache variables .................................................................................................... 96 Environment variables ........................................................................................... 99 PHP variables......................................................................................................... 99 Variable scope................................................................................................................ 100 Variable variables .......................................................................................................... 102 Variables from outside PHP........................................................................................... 103 HTML Forms (GET and POST) .......................................................................... 103 IMAGE SUBMIT variable names.............................................................. 104 HTTP Cookies ..................................................................................................... 104 Environment variables ......................................................................................... 105 Dots in incoming variable names......................................................................... 105 Determining variable types .................................................................................. 106 8. Constants ............................................................................................................................. 107 9. Expressions ......................................................................................................................... 109 10. Operators ........................................................................................................................... 112 Arithmetic Operators ..................................................................................................... 112 Assignment Operators ................................................................................................... 112 Bitwise Operators .......................................................................................................... 113
6
Comparison Operators................................................................................................... 113 Error control Operators.................................................................................................. 114 Execution Operators ...................................................................................................... 114 Incrementing/Decrementing Operators ......................................................................... 115 Logical Operators .......................................................................................................... 116 Operator Precedence...................................................................................................... 116 String Operators............................................................................................................. 117 11. Control Structures ............................................................................................................. 118 if ................................................................................................................................... 118 else .............................................................................................................................. 118 elseif .......................................................................................................................... 119 Alternative syntax for control structures ....................................................................... 119 while ............................................................................................................................ 120 do..while .................................................................................................................... 121 for ................................................................................................................................. 122 foreach ........................................................................................................................ 124 break ............................................................................................................................ 125 continue ...................................................................................................................... 126 switch .......................................................................................................................... 127 require() ........................................................................................................................ 129 include() ........................................................................................................................ 131 12. Functions ........................................................................................................................... 134 User-defined functions................................................................................................... 134 Function arguments ....................................................................................................... 134 Making arguments be passed by reference .......................................................... 134 Default argument values ...................................................................................... 135 Variable-length argument lists ............................................................................. 136 Returning values ............................................................................................................ 137 old_function ............................................................................................................. 137 Variable functions.......................................................................................................... 137 13. Classes and Objects........................................................................................................... 139 class ............................................................................................................................ 139 III. Features ..................................................................................................................................... 142 14. Error handling ................................................................................................................... 143 15. Creating GIF images ......................................................................................................... 144 16. HTTP authentication with PHP......................................................................................... 145 17. Cookies.............................................................................................................................. 147 18. Handling file uploads ........................................................................................................ 148 POST method uploads................................................................................................... 148 Common Pitfalls ............................................................................................................ 149 Uploading multiple files ................................................................................................ 149 PUT method support...................................................................................................... 150 19. Using remote files ............................................................................................................. 152 20. Connection handling ......................................................................................................... 154
7
21. Persistent database connections ........................................................................................ 156 IV. Function Reference .................................................................................................................. 158 I. Apache-specific Functions................................................................................................... 159 apache_lookup_uri ........................................................................................................ 160 apache_note ................................................................................................................... 160 getallheaders .................................................................................................................. 161 virtual............................................................................................................................. 161 II. Arbitrary precision mathematics functions ........................................................................ 163 bcadd.............................................................................................................................. 164 bccomp .......................................................................................................................... 164 bcdiv .............................................................................................................................. 164 bcmod ............................................................................................................................ 164 bcmul ............................................................................................................................. 165 bcpow............................................................................................................................. 165 bcscale ........................................................................................................................... 165 bcsqrt ............................................................................................................................. 166 bcsub.............................................................................................................................. 166 III. Array functions ................................................................................................................. 167 array............................................................................................................................... 168 array_count_values........................................................................................................ 168 array_flip........................................................................................................................ 169 array_keys...................................................................................................................... 169 array_merge ................................................................................................................... 170 array_pad ....................................................................................................................... 170 array_pop....................................................................................................................... 171 array_push ..................................................................................................................... 171 array_reverse ................................................................................................................. 172 array_shift...................................................................................................................... 173 array_slice...................................................................................................................... 173 array_splice.................................................................................................................... 174 array_unshift.................................................................................................................. 175 array_values................................................................................................................... 176 array_walk ..................................................................................................................... 176 arsort .............................................................................................................................. 177 asort ............................................................................................................................... 178 compact.......................................................................................................................... 179 count .............................................................................................................................. 179 current............................................................................................................................ 180 each................................................................................................................................ 181 end ................................................................................................................................. 182 extract ............................................................................................................................ 182 in_array.......................................................................................................................... 184 key ................................................................................................................................. 184 krsort.............................................................................................................................. 184
8
ksort ............................................................................................................................... 185 list .................................................................................................................................. 186 next ................................................................................................................................ 186 pos.................................................................................................................................. 187 prev ................................................................................................................................ 187 range .............................................................................................................................. 188 reset................................................................................................................................ 188 rsort................................................................................................................................ 188 shuffle ............................................................................................................................ 189 sizeof.............................................................................................................................. 189 sort ................................................................................................................................. 190 uasort ............................................................................................................................. 190 uksort ............................................................................................................................. 191 usort ............................................................................................................................... 191 IV. Aspell functions ................................................................................................................ 193 aspell_new ..................................................................................................................... 194 aspell_check .................................................................................................................. 194 aspell_check-raw ........................................................................................................... 194 aspell_suggest................................................................................................................ 195 V. Calendar functions ............................................................................................................. 196 JDToGregorian .............................................................................................................. 197 GregorianToJD .............................................................................................................. 197 JDToJulian ..................................................................................................................... 197 JulianToJD ..................................................................................................................... 198 JDToJewish.................................................................................................................... 198 JewishToJD.................................................................................................................... 198 JDToFrench ................................................................................................................... 199 FrenchToJD ................................................................................................................... 199 JDMonthName .............................................................................................................. 199 JDDayOfWeek............................................................................................................... 200 easter_date ..................................................................................................................... 200 easter_days .................................................................................................................... 201 unixtojd.......................................................................................................................... 202 jdtounix.......................................................................................................................... 202 VI. COM support functions for Windows............................................................................... 203 com_load ....................................................................................................................... 204 com_invoke.................................................................................................................... 204 com_propget .................................................................................................................. 204 com_get ......................................................................................................................... 204 com_propput.................................................................................................................. 204 com_propset .................................................................................................................. 205 com_set.......................................................................................................................... 205 VII. Class/Object Functions .................................................................................................... 206 get_class_methods......................................................................................................... 207
9
get_class_vars................................................................................................................ 207 get_object_vars.............................................................................................................. 207 method_exists ................................................................................................................ 207 VIII. ClibPDF functions.......................................................................................................... 208 cpdf_global_set_document_limits................................................................................. 212 cpdf_set_creator ............................................................................................................ 212 cpdf_set_title ................................................................................................................. 212 cpdf_set_subject ............................................................................................................ 212 cpdf_set_keywords ........................................................................................................ 213 cpdf_open ...................................................................................................................... 213 cpdf_close...................................................................................................................... 213 cpdf_page_init ............................................................................................................... 214 cpdf_finalize_page......................................................................................................... 214 cpdf_finalize .................................................................................................................. 214 cpdf_output_buffer ........................................................................................................ 215 cpdf_save_to_file........................................................................................................... 215 cpdf_set_current_page................................................................................................... 215 cpdf_begin_text ............................................................................................................. 216 cpdf_end_text ................................................................................................................ 216 cpdf_show...................................................................................................................... 217 cpdf_show_xy................................................................................................................ 217 cpdf_text ........................................................................................................................ 217 cpdf_set_font ................................................................................................................. 218 cpdf_set_leading............................................................................................................ 218 cpdf_set_text_rendering ................................................................................................ 218 cpdf_set_horiz_scaling .................................................................................................. 219 cpdf_set_text_rise.......................................................................................................... 219 cpdf_set_text_matrix ..................................................................................................... 219 cpdf_set_text_pos .......................................................................................................... 219 cpdf_set_char_spacing .................................................................................................. 220 cpdf_set_word_spacing ................................................................................................. 220 cpdf_continue_text ........................................................................................................ 220 cpdf_stringwidth............................................................................................................ 221 cpdf_save ....................................................................................................................... 221 cpdf_restore ................................................................................................................... 221 cpdf_translate ................................................................................................................ 222 cpdf_scale ...................................................................................................................... 222 cpdf_rotate..................................................................................................................... 222 cpdf_setflat .................................................................................................................... 223 cpdf_setlinejoin ............................................................................................................. 223 cpdf_setlinecap .............................................................................................................. 223 cpdf_setmiterlimit.......................................................................................................... 223 cpdf_setlinewidth........................................................................................................... 224 cpdf_setdash .................................................................................................................. 224
10
cpdf_newpath................................................................................................................. 224 cpdf_moveto .................................................................................................................. 224 cpdf_rmoveto................................................................................................................. 225 cpdf_curveto .................................................................................................................. 225 cpdf_lineto..................................................................................................................... 226 cpdf_rlineto.................................................................................................................... 226 cpdf_circle ..................................................................................................................... 226 cpdf_arc ......................................................................................................................... 227 cpdf_rect ........................................................................................................................ 227 cpdf_closepath............................................................................................................... 228 cpdf_stroke .................................................................................................................... 228 cpdf_closepath_stroke ................................................................................................... 228 cpdf_fill.......................................................................................................................... 228 cpdf_fill_stroke.............................................................................................................. 229 cpdf_closepath_fill_stroke............................................................................................. 229 cpdf_clip ........................................................................................................................ 229 cpdf_setgray_fill ............................................................................................................ 230 cpdf_setgray_stroke....................................................................................................... 230 cpdf_setgray .................................................................................................................. 230 cpdf_setrgbcolor_fill...................................................................................................... 231 cpdf_setrgbcolor_stroke ................................................................................................ 231 cpdf_setrgbcolor ............................................................................................................ 231 cpdf_add_outline ........................................................................................................... 231 cpdf_set_page_animation .............................................................................................. 232 cpdf_import_jpeg .......................................................................................................... 233 cpdf_place_inline_image............................................................................................... 233 cpdf_add_annotation ..................................................................................................... 233 IX. Cybercash payment functions ........................................................................................... 235 cybercash_encr .............................................................................................................. 236 cybercash_decr .............................................................................................................. 236 cybercash_base64_encode............................................................................................. 236 cybercash_base64_decode............................................................................................. 236 X. DOM XML functions......................................................................................................... 237 xmldoc ........................................................................................................................... 238 xmldocfile ...................................................................................................................... 238 xmltree........................................................................................................................... 238 XI. Compression functions ..................................................................................................... 239 gzclose ........................................................................................................................... 240 gzeof .............................................................................................................................. 240 gzfile .............................................................................................................................. 240 gzgetc............................................................................................................................. 240 gzgets............................................................................................................................. 241 gzgetss ........................................................................................................................... 241 gzopen............................................................................................................................ 241
11
gzpassthru ...................................................................................................................... 242 gzputs............................................................................................................................. 242 gzread ............................................................................................................................ 243 gzrewind ........................................................................................................................ 243 gzseek ............................................................................................................................ 244 gztell .............................................................................................................................. 244 gzwrite ........................................................................................................................... 244 readgzfile ....................................................................................................................... 245 gzcompress .................................................................................................................... 245 gzuncompress ................................................................................................................ 245 XII. Database (dbm-style) abstraction layer functions ........................................................... 247 dba_close ....................................................................................................................... 249 dba_delete...................................................................................................................... 249 dba_exists ...................................................................................................................... 249 dba_fetch ....................................................................................................................... 250 dba_firstkey ................................................................................................................... 250 dba_insert ...................................................................................................................... 250 dba_nextkey................................................................................................................... 251 dba_popen...................................................................................................................... 251 dba_open........................................................................................................................ 252 dba_optimize ................................................................................................................. 252 dba_replace.................................................................................................................... 252 dba_sync ........................................................................................................................ 253 XIII. Date and Time functions ................................................................................................ 254 checkdate ....................................................................................................................... 255 date ................................................................................................................................ 255 getdate............................................................................................................................ 256 gettimeofday .................................................................................................................. 257 gmdate ........................................................................................................................... 257 gmmktime...................................................................................................................... 258 gmstrftime...................................................................................................................... 258 localtime ........................................................................................................................ 259 microtime....................................................................................................................... 259 mktime........................................................................................................................... 260 strftime........................................................................................................................... 261 time ................................................................................................................................ 263 strtotime......................................................................................................................... 263 XIV. dBase functions .............................................................................................................. 264 dbase_create .................................................................................................................. 265 dbase_open .................................................................................................................... 266 dbase_close.................................................................................................................... 266 dbase_pack .................................................................................................................... 266 dbase_add_record .......................................................................................................... 266 dbase_replace_record .................................................................................................... 267
12
dbase_delete_record ...................................................................................................... 267 dbase_get_record........................................................................................................... 267 dbase_get_record_with_names...................................................................................... 268 dbase_numfields ............................................................................................................ 268 dbase_numrecords ......................................................................................................... 268 XV. dbm functions .................................................................................................................. 270 dbmopen ........................................................................................................................ 271 dbmclose........................................................................................................................ 271 dbmexists ....................................................................................................................... 271 dbmfetch ........................................................................................................................ 271 dbminsert ....................................................................................................................... 272 dbmreplace .................................................................................................................... 272 dbmdelete ...................................................................................................................... 272 dbmfirstkey .................................................................................................................... 273 dbmnextkey ................................................................................................................... 273 dblist .............................................................................................................................. 273 XVI. Directory functions ........................................................................................................ 274 chdir............................................................................................................................... 275 dir................................................................................................................................... 275 closedir .......................................................................................................................... 275 opendir........................................................................................................................... 276 readdir............................................................................................................................ 276 rewinddir........................................................................................................................ 277 XVII. Dynamic Loading functions ......................................................................................... 278 dl .................................................................................................................................... 279 XVIII. Encryption functions ................................................................................................... 280 mcrypt_get_cipher_name .............................................................................................. 282 mcrypt_get_block_size.................................................................................................. 282 mcrypt_get_key_size ..................................................................................................... 282 mcrypt_create_iv ........................................................................................................... 283 mcrypt_cbc .................................................................................................................... 283 mcrypt_cfb..................................................................................................................... 284 mcrypt_ecb .................................................................................................................... 284 mcrypt_ofb .................................................................................................................... 285 XIX. filePro functions ............................................................................................................. 286 filepro............................................................................................................................. 287 filepro_fieldname........................................................................................................... 287 filepro_fieldtype............................................................................................................. 287 filepro_fieldwidth .......................................................................................................... 287 filepro_retrieve............................................................................................................... 287 filepro_fieldcount........................................................................................................... 288 filepro_rowcount............................................................................................................ 288 XX. Filesystem functions........................................................................................................ 289 basename ....................................................................................................................... 290
13
chgrp .............................................................................................................................. 290 chmod ............................................................................................................................ 290 chown............................................................................................................................. 291 clearstatcache................................................................................................................. 291 copy ............................................................................................................................... 292 delete.............................................................................................................................. 292 dirname .......................................................................................................................... 292 diskfreespace ................................................................................................................. 293 fclose.............................................................................................................................. 293 feof................................................................................................................................. 294 fgetc ............................................................................................................................... 294 fgetcsv............................................................................................................................ 294 fgets ............................................................................................................................... 295 fgetss.............................................................................................................................. 296 file .................................................................................................................................. 296 file_exists ....................................................................................................................... 297 fileatime ......................................................................................................................... 297 filectime ......................................................................................................................... 298 filegroup......................................................................................................................... 298 fileinode ......................................................................................................................... 298 filemtime........................................................................................................................ 299 fileowner ........................................................................................................................ 299 fileperms ........................................................................................................................ 299 filesize............................................................................................................................ 300 filetype ........................................................................................................................... 300 flock ............................................................................................................................... 300 fopen .............................................................................................................................. 301 fpassthru ........................................................................................................................ 302 fputs ............................................................................................................................... 303 fread............................................................................................................................... 303 fseek............................................................................................................................... 303 ftell................................................................................................................................. 304 ftruncate......................................................................................................................... 304 fwrite.............................................................................................................................. 305 set_file_buffer ................................................................................................................ 305 is_dir .............................................................................................................................. 305 is_executable ................................................................................................................. 306 is_file ............................................................................................................................. 306 is_link ............................................................................................................................ 306 is_readable..................................................................................................................... 307 is_writeable.................................................................................................................... 307 link................................................................................................................................. 307 linkinfo .......................................................................................................................... 308 mkdir.............................................................................................................................. 308
14
pclose............................................................................................................................. 309 popen ............................................................................................................................. 309 readfile ........................................................................................................................... 309 readlink .......................................................................................................................... 310 rename ........................................................................................................................... 310 rewind ............................................................................................................................ 311 rmdir .............................................................................................................................. 311 stat.................................................................................................................................. 311 lstat ................................................................................................................................ 312 symlink .......................................................................................................................... 313 tempnam ........................................................................................................................ 313 touch .............................................................................................................................. 314 umask............................................................................................................................. 314 unlink............................................................................................................................. 315 XXI. Forms Data Format functions ........................................................................................ 316 fdf_open......................................................................................................................... 318 fdf_close ........................................................................................................................ 318 fdf_create....................................................................................................................... 318 fdf_save ......................................................................................................................... 319 fdf_get_value ................................................................................................................. 319 fdf_set_value ................................................................................................................. 320 fdf_next_field_name...................................................................................................... 320 fdf_set_ap ...................................................................................................................... 320 fdf_set_status................................................................................................................. 321 fdf_get_status ................................................................................................................ 321 fdf_set_file..................................................................................................................... 321 fdf_get_file .................................................................................................................... 321 XXII. FTP functions ............................................................................................................... 323 ftp_connect .................................................................................................................... 324 ftp_login ........................................................................................................................ 324 ftp_pwd.......................................................................................................................... 324 ftp_cdup......................................................................................................................... 324 ftp_chdir ........................................................................................................................ 325 ftp_mkdir ....................................................................................................................... 325 ftp_rmdir........................................................................................................................ 325 ftp_nlist.......................................................................................................................... 325 ftp_rawlist...................................................................................................................... 326 ftp_systype..................................................................................................................... 326 ftp_pasv ......................................................................................................................... 326 ftp_get............................................................................................................................ 327 ftp_fget .......................................................................................................................... 327 ftp_put............................................................................................................................ 327 ftp_fput .......................................................................................................................... 327 ftp_size .......................................................................................................................... 328
15
ftp_mdtm ....................................................................................................................... 328 ftp_rename..................................................................................................................... 328 ftp_delete ....................................................................................................................... 329 ftp_site ........................................................................................................................... 329 ftp_quit .......................................................................................................................... 329 XXIII. GNU Gettext................................................................................................................ 330 bindtextdomain .............................................................................................................. 331 dcgettext ........................................................................................................................ 331 dgettext .......................................................................................................................... 331 gettext ............................................................................................................................ 331 textdomain ..................................................................................................................... 332 XXIV. Hash functions............................................................................................................. 333 mhash_get_hash_name.................................................................................................. 335 mhash_get_block_size................................................................................................... 335 mhash_count.................................................................................................................. 335 mhash............................................................................................................................. 336 XXV. HTTP functions ............................................................................................................ 337 header ............................................................................................................................ 338 setcookie ........................................................................................................................ 339 XXVI. Hyperwave functions................................................................................................... 341 hw_Array2Objrec .......................................................................................................... 346 hw_Children .................................................................................................................. 346 hw_ChildrenObj ............................................................................................................ 346 hw_Close ....................................................................................................................... 346 hw_Connect................................................................................................................... 347 hw_Cp............................................................................................................................ 347 hw_Deleteobject ............................................................................................................ 347 hw_DocByAnchor......................................................................................................... 348 hw_DocByAnchorObj................................................................................................... 348 hw_DocumentAttributes................................................................................................ 348 hw_DocumentBodyTag ................................................................................................. 348 hw_DocumentContent................................................................................................... 349 hw_DocumentSetContent.............................................................................................. 349 hw_DocumentSize......................................................................................................... 349 hw_ErrorMsg................................................................................................................. 350 hw_EditText................................................................................................................... 350 hw_Error........................................................................................................................ 350 hw_Free_Document ...................................................................................................... 351 hw_GetParents............................................................................................................... 351 hw_GetParentsObj......................................................................................................... 351 hw_GetChildColl........................................................................................................... 351 hw_GetChildCollObj..................................................................................................... 352 hw_GetRemote .............................................................................................................. 352 hw_GetRemoteChildren ................................................................................................ 352
16
hw_GetSrcByDestObj ................................................................................................... 353 hw_GetObject................................................................................................................ 353 hw_GetAndLock ........................................................................................................... 354 hw_GetText ................................................................................................................... 354 hw_GetObjectByQuery ................................................................................................. 355 hw_GetObjectByQueryObj ........................................................................................... 355 hw_GetObjectByQueryColl .......................................................................................... 356 hw_GetObjectByQueryCollObj .................................................................................... 356 hw_GetChildDocColl .................................................................................................... 357 hw_GetChildDocCollObj .............................................................................................. 357 hw_GetAnchors............................................................................................................. 357 hw_GetAnchorsObj....................................................................................................... 357 hw_Mv........................................................................................................................... 358 hw_Identify.................................................................................................................... 358 hw_InCollections........................................................................................................... 358 hw_Info.......................................................................................................................... 359 hw_InsColl .................................................................................................................... 359 hw_InsDoc..................................................................................................................... 359 hw_InsertDocument ...................................................................................................... 360 hw_InsertObject ............................................................................................................ 360 hw_mapid ...................................................................................................................... 360 hw_Modifyobject .......................................................................................................... 361 hw_New_Document ...................................................................................................... 363 hw_Objrec2Array .......................................................................................................... 364 hw_OutputDocument .................................................................................................... 364 hw_pConnect................................................................................................................. 364 hw_PipeDocument ........................................................................................................ 365 hw_Root ........................................................................................................................ 365 hw_Unlock .................................................................................................................... 365 hw_Who ........................................................................................................................ 366 hw_Username ................................................................................................................ 366 XXVII. Image functions ......................................................................................................... 367 GetImageSize ................................................................................................................ 368 ImageArc ....................................................................................................................... 368 ImageChar ..................................................................................................................... 369 ImageCharUp ................................................................................................................ 369 ImageColorAllocate ...................................................................................................... 369 ImageColorDeAllocate.................................................................................................. 370 ImageColorAt ................................................................................................................ 370 ImageColorClosest ........................................................................................................ 370 ImageColorExact........................................................................................................... 371 ImageColorResolve ....................................................................................................... 371 ImageGammaCorrect .................................................................................................... 371 ImageColorSet............................................................................................................... 372
17
ImageColorsForIndex.................................................................................................... 372 ImageColorsTotal .......................................................................................................... 372 ImageColorTransparent ................................................................................................. 373 ImageCopy .................................................................................................................... 373 ImageCopyResized........................................................................................................ 373 ImageCreate................................................................................................................... 374 ImageCreateFromGif..................................................................................................... 374 ImageCreateFromJPEG................................................................................................. 375 ImageCreateFromPNG .................................................................................................. 375 ImageDashedLine.......................................................................................................... 376 ImageDestroy ................................................................................................................ 376 ImageFill........................................................................................................................ 377 ImageFilledPolygon ...................................................................................................... 377 ImageFilledRectangle.................................................................................................... 377 ImageFillToBorder ........................................................................................................ 377 ImageFontHeight ........................................................................................................... 378 ImageFontWidth ............................................................................................................ 378 ImageGIF....................................................................................................................... 378 ImagePng....................................................................................................................... 379 ImageJPEG .................................................................................................................... 379 ImageInterlace ............................................................................................................... 380 ImageLine...................................................................................................................... 380 ImageLoadFont.............................................................................................................. 380 ImagePolygon................................................................................................................ 381 ImagePSBBox ............................................................................................................... 381 ImagePSEncodeFont ..................................................................................................... 382 ImagePSFreeFont .......................................................................................................... 382 ImagePSLoadFont ......................................................................................................... 383 ImagePsExtendFont....................................................................................................... 383 ImagePsSlantFont.......................................................................................................... 383 ImagePSText.................................................................................................................. 383 ImageRectangle ............................................................................................................. 384 ImageSetPixel................................................................................................................ 385 ImageString ................................................................................................................... 385 ImageStringUp .............................................................................................................. 385 ImageSX ........................................................................................................................ 386 ImageSY ........................................................................................................................ 386 ImageTTFBBox............................................................................................................. 386 ImageTTFText ............................................................................................................... 387 XXVIII. IMAP, POP3 and NNTP functions ........................................................................... 389 imap_append.................................................................................................................. 390 imap_base64 .................................................................................................................. 390 imap_body ..................................................................................................................... 391 imap_check.................................................................................................................... 391
18
imap_close..................................................................................................................... 392 imap_createmailbox ...................................................................................................... 392 imap_delete.................................................................................................................... 394 imap_deletemailbox ...................................................................................................... 394 imap_expunge................................................................................................................ 394 imap_fetchbody ............................................................................................................. 395 imap_fetchstructure ....................................................................................................... 395 imap_header .................................................................................................................. 397 imap_rfc822_parse_headers .......................................................................................... 399 imap_headers................................................................................................................. 399 imap_listmailbox ........................................................................................................... 400 imap_getmailboxes........................................................................................................ 400 imap_listsubscribed ....................................................................................................... 401 imap_getsubscribed ....................................................................................................... 402 imap_mail_copy ............................................................................................................ 402 imap_mail_move ........................................................................................................... 402 imap_num_msg ............................................................................................................. 403 imap_num_recent .......................................................................................................... 403 imap_open ..................................................................................................................... 403 imap_ping ...................................................................................................................... 405 imap_renamemailbox .................................................................................................... 405 imap_reopen .................................................................................................................. 406 imap_subscribe .............................................................................................................. 406 imap_undelete................................................................................................................ 407 imap_unsubscribe .......................................................................................................... 407 imap_qprint.................................................................................................................... 407 imap_8bit....................................................................................................................... 407 imap_binary................................................................................................................... 408 imap_scanmailbox......................................................................................................... 408 imap_mailboxmsginfo................................................................................................... 408 imap_rfc822_write_address .......................................................................................... 409 imap_rfc822_parse_adrlist ............................................................................................ 409 imap_setflag_full ........................................................................................................... 410 imap_clearflag_full........................................................................................................ 411 imap_sort ....................................................................................................................... 411 imap_fetchheader .......................................................................................................... 412 imap_uid ........................................................................................................................ 413 imap_msgno .................................................................................................................. 413 imap_search................................................................................................................... 413 imap_last_error.............................................................................................................. 414 imap_errors.................................................................................................................... 415 imap_alerts .................................................................................................................... 415 imap_status .................................................................................................................... 415 imap_utf7_decode ......................................................................................................... 416
19
imap_utf7_encode ......................................................................................................... 417 imap_utf8....................................................................................................................... 417 imap_fetch_overview .................................................................................................... 417 imap_mime_header_decode .......................................................................................... 418 imap_mail_compose...................................................................................................... 419 imap_mail ...................................................................................................................... 419 XXIX. Informix functions....................................................................................................... 421 ifx_connect .................................................................................................................... 423 ifx_pconnect .................................................................................................................. 423 ifx_close ........................................................................................................................ 424 ifx_query........................................................................................................................ 424 ifx_prepare..................................................................................................................... 426 ifx_do............................................................................................................................. 427 ifx_error......................................................................................................................... 427 ifx_errormsg .................................................................................................................. 428 ifx_affected_rows .......................................................................................................... 428 ifx_getsqlca.................................................................................................................... 429 ifx_fetch_row................................................................................................................. 430 ifx_htmltbl_result .......................................................................................................... 431 ifx_fieldtypes ................................................................................................................. 431 ifx_fieldproperties.......................................................................................................... 432 ifx_num_fields............................................................................................................... 433 ifx_num_rows................................................................................................................ 433 ifx_free_result................................................................................................................ 433 ifx_create_char .............................................................................................................. 433 ifx_free_char.................................................................................................................. 434 ifx_update_char ............................................................................................................. 434 ifx_get_char................................................................................................................... 434 ifx_create_blob .............................................................................................................. 434 ifx_copy_blob................................................................................................................ 435 ifx_free_blob ................................................................................................................. 435 ifx_get_blob................................................................................................................... 435 ifx_update_blob............................................................................................................. 436 ifx_blobinfile_mode ...................................................................................................... 436 ifx_textasvarchar ........................................................................................................... 436 ifx_byteasvarchar........................................................................................................... 436 ifx_nullformat................................................................................................................ 437 ifxus_create_slob........................................................................................................... 437 ifx_free_slob.................................................................................................................. 437 ifxus_close_slob ............................................................................................................ 438 ifxus_open_slob............................................................................................................. 438 ifxus_tell_slob ............................................................................................................... 438 ifxus_seek_slob ............................................................................................................. 438 ifxus_read_slob.............................................................................................................. 439
20
ifxus_write_slob ............................................................................................................ 439 XXX. InterBase functions....................................................................................................... 440 ibase_connect ................................................................................................................ 441 ibase_pconnect .............................................................................................................. 442 ibase_close..................................................................................................................... 442 ibase_query.................................................................................................................... 442 ibase_fetch_row............................................................................................................. 443 ibase_fetch_object ......................................................................................................... 443 ibase_free_result............................................................................................................ 443 ibase_prepare................................................................................................................. 444 ibase_execute................................................................................................................. 444 ibase_free_query............................................................................................................ 445 ibase_timefmt ................................................................................................................ 445 ibase_num_fields ........................................................................................................... 445 XXXI. LDAP functions........................................................................................................... 447 ldap_add ........................................................................................................................ 450 ldap_mod_add ............................................................................................................... 450 ldap_mod_del ................................................................................................................ 451 ldap_mod_replace.......................................................................................................... 451 ldap_bind ....................................................................................................................... 451 ldap_close ...................................................................................................................... 452 ldap_connect.................................................................................................................. 452 ldap_count_entries......................................................................................................... 452 ldap_delete..................................................................................................................... 453 ldap_dn2ufn................................................................................................................... 453 ldap_explode_dn............................................................................................................ 453 ldap_first_attribute......................................................................................................... 453 ldap_first_entry.............................................................................................................. 454 ldap_free_result ............................................................................................................. 454 ldap_get_attributes......................................................................................................... 455 ldap_get_dn ................................................................................................................... 456 ldap_get_entries............................................................................................................. 456 ldap_get_values ............................................................................................................. 457 ldap_get_values_len ...................................................................................................... 458 ldap_list ......................................................................................................................... 458 ldap_modify................................................................................................................... 459 ldap_next_attribute ........................................................................................................ 459 ldap_next_entry ............................................................................................................. 460 ldap_read ....................................................................................................................... 460 ldap_search .................................................................................................................... 461 ldap_unbind ................................................................................................................... 462 ldap_err2str.................................................................................................................... 462 ldap_errno...................................................................................................................... 463 ldap_error ...................................................................................................................... 463
21
XXXII. Mail functions ............................................................................................................ 465 mail ................................................................................................................................ 466 XXXIII. Mathematical functions ............................................................................................ 467 Abs................................................................................................................................. 468 Acos............................................................................................................................... 468 Asin................................................................................................................................ 468 Atan ............................................................................................................................... 468 Atan2 ............................................................................................................................. 469 base_convert .................................................................................................................. 469 BinDec........................................................................................................................... 469 Ceil ................................................................................................................................ 470 Cos................................................................................................................................. 470 DecBin........................................................................................................................... 470 DecHex .......................................................................................................................... 471 DecOct........................................................................................................................... 471 deg2rad .......................................................................................................................... 471 Exp................................................................................................................................. 471 Floor .............................................................................................................................. 472 getrandmax .................................................................................................................... 472 HexDec .......................................................................................................................... 472 Log................................................................................................................................. 473 Log10............................................................................................................................. 473 max ................................................................................................................................ 473 min................................................................................................................................. 474 mt_rand.......................................................................................................................... 474 mt_srand ........................................................................................................................ 475 mt_getrandmax .............................................................................................................. 475 number_format .............................................................................................................. 475 OctDec........................................................................................................................... 476 pi .................................................................................................................................... 476 pow ................................................................................................................................ 476 rad2deg .......................................................................................................................... 477 rand ................................................................................................................................ 477 round.............................................................................................................................. 477 Sin.................................................................................................................................. 478 Sqrt ................................................................................................................................ 478 srand .............................................................................................................................. 478 Tan ................................................................................................................................. 479 XXXIV. MCAL functions ...................................................................................................... 480 mcal_open...................................................................................................................... 481 mcal_close ..................................................................................................................... 481 mcal_fetch_event........................................................................................................... 481 mcal_list_events ............................................................................................................ 482 mcal_append_event ....................................................................................................... 482
22
mcal_store_event ........................................................................................................... 483 mcal_delete_event ......................................................................................................... 483 mcal_snooze .................................................................................................................. 483 mcal_list_alarms............................................................................................................ 483 mcal_event_init ............................................................................................................. 484 mcal_event_set_category............................................................................................... 484 mcal_event_set_title ...................................................................................................... 484 mcal_event_set_description........................................................................................... 485 mcal_event_set_start ..................................................................................................... 485 mcal_event_set_end....................................................................................................... 485 mcal_event_set_alarm ................................................................................................... 486 mcal_event_set_class..................................................................................................... 486 mcal_is_leap_year ......................................................................................................... 486 mcal_days_in_month..................................................................................................... 486 mcal_date_valid............................................................................................................. 487 mcal_time_valid ............................................................................................................ 487 mcal_day_of_week........................................................................................................ 487 mcal_day_of_year ......................................................................................................... 487 mcal_date_compare....................................................................................................... 488 mcal_next_recurrence.................................................................................................... 488 mcal_event_set_recur_none .......................................................................................... 488 mcal_event_set_recur_daily .......................................................................................... 489 mcal_event_set_recur_weekly....................................................................................... 489 mcal_event_set_recur_monthly_mday .......................................................................... 489 mcal_event_set_recur_monthly_wday .......................................................................... 489 mcal_event_set_recur_yearly ........................................................................................ 490 mcal_fetch_current_stream_event................................................................................. 490 XXXV. Microsoft SQL Server functions................................................................................ 492 mssql_close.................................................................................................................... 493 mssql_connect ............................................................................................................... 493 mssql_data_seek ............................................................................................................ 493 mssql_fetch_array.......................................................................................................... 494 mssql_fetch_field........................................................................................................... 494 mssql_fetch_object ........................................................................................................ 495 mssql_fetch_row............................................................................................................ 495 mssql_field_length......................................................................................................... 496 mssql_field_name .......................................................................................................... 496 mssql_field_seek............................................................................................................ 496 mssql_field_type............................................................................................................ 496 mssql_free_result........................................................................................................... 496 mssql_get_last_message................................................................................................ 497 mssql_min_error_severity ............................................................................................. 497 mssql_min_message_severity ....................................................................................... 497 mssql_num_fields .......................................................................................................... 497
23
mssql_num_rows ........................................................................................................... 498 mssql_pconnect ............................................................................................................. 498 mssql_query................................................................................................................... 498 mssql_result................................................................................................................... 499 mssql_select_db............................................................................................................. 499 XXXVI. Miscellaneous functions........................................................................................... 501 connection_aborted........................................................................................................ 502 connection_status .......................................................................................................... 502 connection_timeout ....................................................................................................... 502 define ............................................................................................................................. 502 defined ........................................................................................................................... 503 die .................................................................................................................................. 503 eval................................................................................................................................. 504 exit ................................................................................................................................. 505 func_get_arg .................................................................................................................. 505 func_get_args................................................................................................................. 506 func_num_args .............................................................................................................. 506 function_exists............................................................................................................... 507 get_browser ................................................................................................................... 507 ignore_user_abort .......................................................................................................... 509 iptcparse......................................................................................................................... 509 leak ................................................................................................................................ 509 pack................................................................................................................................ 510 register_shutdown_function .......................................................................................... 511 serialize.......................................................................................................................... 511 sleep............................................................................................................................... 512 uniqid............................................................................................................................. 513 unpack............................................................................................................................ 513 unserialize...................................................................................................................... 514 usleep............................................................................................................................. 515 XXXVII. mSQL functions ...................................................................................................... 516 msql ............................................................................................................................... 517 msql_affected_rows....................................................................................................... 517 msql_close ..................................................................................................................... 517 msql_connect................................................................................................................. 517 msql_create_db.............................................................................................................. 518 msql_createdb................................................................................................................ 518 msql_data_seek.............................................................................................................. 518 msql_dbname................................................................................................................. 519 msql_drop_db ................................................................................................................ 519 msql_dropdb .................................................................................................................. 519 msql_error...................................................................................................................... 520 msql_fetch_array ........................................................................................................... 520 msql_fetch_field ............................................................................................................ 520
24
msql_fetch_object.......................................................................................................... 521 msql_fetch_row ............................................................................................................. 522 msql_fieldname.............................................................................................................. 522 msql_field_seek ............................................................................................................. 522 msql_fieldtable .............................................................................................................. 523 msql_fieldtype ............................................................................................................... 523 msql_fieldflags............................................................................................................... 523 msql_fieldlen ................................................................................................................. 523 msql_free_result ............................................................................................................ 524 msql_freeresult .............................................................................................................. 524 msql_list_fields.............................................................................................................. 524 msql_listfields................................................................................................................ 524 msql_list_dbs................................................................................................................. 525 msql_listdbs................................................................................................................... 525 msql_list_tables ............................................................................................................. 525 msql_listtables ............................................................................................................... 525 msql_num_fields............................................................................................................ 526 msql_num_rows............................................................................................................. 526 msql_numfields.............................................................................................................. 526 msql_numrows............................................................................................................... 526 msql_pconnect............................................................................................................... 527 msql_query .................................................................................................................... 527 msql_regcase ................................................................................................................. 527 msql_result .................................................................................................................... 528 msql_select_db .............................................................................................................. 528 msql_selectdb ................................................................................................................ 528 msql_tablename............................................................................................................. 529 XXXVIII. MySQL functions .................................................................................................. 530 mysql_affected_rows..................................................................................................... 531 mysql_change_user ....................................................................................................... 531 mysql_close ................................................................................................................... 531 mysql_connect............................................................................................................... 532 mysql_create_db............................................................................................................ 533 mysql_data_seek............................................................................................................ 534 mysql_db_query ............................................................................................................ 535 mysql_drop_db .............................................................................................................. 535 mysql_errno................................................................................................................... 535 mysql_error.................................................................................................................... 536 mysql_fetch_array ......................................................................................................... 536 mysql_fetch_field .......................................................................................................... 537 mysql_fetch_lengths...................................................................................................... 539 mysql_fetch_object........................................................................................................ 539 mysql_fetch_row ........................................................................................................... 540 mysql_field_name.......................................................................................................... 541
25
mysql_field_seek ........................................................................................................... 541 mysql_field_table .......................................................................................................... 541 mysql_field_type ........................................................................................................... 541 mysql_field_flags........................................................................................................... 542 mysql_field_len ............................................................................................................. 543 mysql_free_result .......................................................................................................... 543 mysql_insert_id ............................................................................................................. 543 mysql_list_fields............................................................................................................ 544 mysql_list_dbs............................................................................................................... 544 mysql_list_tables ........................................................................................................... 544 mysql_num_fields.......................................................................................................... 545 mysql_num_rows........................................................................................................... 545 mysql_pconnect............................................................................................................. 545 mysql_query .................................................................................................................. 546 mysql_result .................................................................................................................. 547 mysql_select_db ............................................................................................................ 548 mysql_tablename........................................................................................................... 548 XXXIX. Network Functions ................................................................................................... 550 checkdnsrr...................................................................................................................... 551 closelog.......................................................................................................................... 551 debugger_off.................................................................................................................. 551 debugger_on .................................................................................................................. 551 fsockopen....................................................................................................................... 552 gethostbyaddr ................................................................................................................ 553 gethostbyname............................................................................................................... 553 gethostbynamel.............................................................................................................. 553 getmxrr .......................................................................................................................... 553 getprotobyname ............................................................................................................. 554 getprotobynumber.......................................................................................................... 554 getservbyname............................................................................................................... 554 getservbyport ................................................................................................................. 555 openlog .......................................................................................................................... 555 pfsockopen..................................................................................................................... 555 set_socket_blocking ...................................................................................................... 556 syslog............................................................................................................................. 556 XL. NIS functions ................................................................................................................... 557 yp_get_default_domain ................................................................................................. 558 yp_order......................................................................................................................... 558 yp_master ...................................................................................................................... 558 yp_match ....................................................................................................................... 559 yp_first........................................................................................................................... 559 yp_next .......................................................................................................................... 560 XLI. ODBC functions ............................................................................................................. 562 odbc_autocommit .......................................................................................................... 563
26
odbc_binmode ............................................................................................................... 563 odbc_close ..................................................................................................................... 564 odbc_close_all ............................................................................................................... 564 odbc_commit ................................................................................................................. 565 odbc_connect................................................................................................................. 565 odbc_cursor ................................................................................................................... 566 odbc_do ......................................................................................................................... 566 odbc_exec ...................................................................................................................... 566 odbc_execute ................................................................................................................. 566 odbc_fetch_into ............................................................................................................. 567 odbc_fetch_row ............................................................................................................. 567 odbc_field_name............................................................................................................ 567 odbc_field_num ............................................................................................................. 568 odbc_field_type ............................................................................................................. 568 odbc_field_len ............................................................................................................... 568 odbc_field_precision...................................................................................................... 569 odbc_field_scale ............................................................................................................ 569 odbc_free_result ............................................................................................................ 569 odbc_longreadlen .......................................................................................................... 570 odbc_num_fields............................................................................................................ 570 odbc_pconnect............................................................................................................... 570 odbc_prepare ................................................................................................................. 571 odbc_num_rows............................................................................................................. 571 odbc_result .................................................................................................................... 571 odbc_result_all .............................................................................................................. 572 odbc_rollback ................................................................................................................ 572 odbc_setoption............................................................................................................... 572 odbc_tables .................................................................................................................... 573 odbc_tableprivileges ...................................................................................................... 574 odbc_columns................................................................................................................ 575 odbc_columnprivileges.................................................................................................. 576 odbc_gettypeinfo ........................................................................................................... 577 odbc_primarykeys ......................................................................................................... 577 odbc_foreignkeys........................................................................................................... 578 odbc_procedures............................................................................................................ 579 odbc_procedurecolumns................................................................................................ 580 odbc_specialcolumns..................................................................................................... 580 odbc_statistics................................................................................................................ 581 XLII. Oracle functions ............................................................................................................ 583 Ora_Bind ....................................................................................................................... 584 Ora_Close ...................................................................................................................... 584 Ora_ColumnName......................................................................................................... 584 Ora_ColumnType .......................................................................................................... 585 Ora_Commit .................................................................................................................. 585
27
Ora_CommitOff............................................................................................................. 586 Ora_CommitOn ............................................................................................................. 586 Ora_Error....................................................................................................................... 586 Ora_ErrorCode .............................................................................................................. 587 Ora_Exec ....................................................................................................................... 587 Ora_Fetch ...................................................................................................................... 587 Ora_GetColumn ............................................................................................................ 588 Ora_Logoff .................................................................................................................... 588 Ora_Logon..................................................................................................................... 588 Ora_Open ...................................................................................................................... 589 Ora_Parse....................................................................................................................... 589 Ora_Rollback................................................................................................................. 589 XLIII. Oracle 8 functions........................................................................................................ 591 OCIDefineByName ....................................................................................................... 592 OCIBindByName .......................................................................................................... 592 OCILogon...................................................................................................................... 594 OCIPLogon.................................................................................................................... 596 OCINLogon................................................................................................................... 597 OCILogOff .................................................................................................................... 599 OCIExecute ................................................................................................................... 599 OCICommit ................................................................................................................... 599 OCIRollback.................................................................................................................. 600 OCINewDescriptor........................................................................................................ 600 OCIRowCount ............................................................................................................... 602 OCINumCols................................................................................................................. 602 OCIResult ...................................................................................................................... 603 OCIFetch ....................................................................................................................... 603 OCIFetchInto................................................................................................................. 604 OCIFetchStatement ....................................................................................................... 604 OCIColumnIsNULL...................................................................................................... 605 OCIColumnSize ............................................................................................................ 606 OCIServerVersion.......................................................................................................... 607 OCIStatementType ........................................................................................................ 607 OCINewCursor.............................................................................................................. 608 OCIFreeStatement ......................................................................................................... 609 OCIFreeCursor .............................................................................................................. 610 OCIColumnName.......................................................................................................... 610 OCIColumnType ........................................................................................................... 611 OCIParse........................................................................................................................ 612 OCIError........................................................................................................................ 612 OCIInternalDebug ......................................................................................................... 612 XLIV. PDF functions .............................................................................................................. 614 PDF_get_info ................................................................................................................ 620 PDF_set_info................................................................................................................. 620
28
PDF_open ...................................................................................................................... 621 PDF_close...................................................................................................................... 621 PDF_begin_page ........................................................................................................... 622 PDF_end_page .............................................................................................................. 622 PDF_show ..................................................................................................................... 622 PDF_show_boxed.......................................................................................................... 622 PDF_show_xy ............................................................................................................... 623 PDF_set_font................................................................................................................. 623 PDF_set_leading............................................................................................................ 624 PDF_set_parameter ....................................................................................................... 624 PDF_get_parameter....................................................................................................... 624 PDF_set_value............................................................................................................... 625 PDF_get_value .............................................................................................................. 625 PDF_set_text_rendering ................................................................................................ 625 PDF_set_horiz_scaling.................................................................................................. 626 PDF_set_text_rise.......................................................................................................... 626 PDF_set_text_matrix ..................................................................................................... 626 PDF_set_text_pos.......................................................................................................... 626 PDF_set_char_spacing .................................................................................................. 627 PDF_set_word_spacing ................................................................................................. 627 PDF_skew...................................................................................................................... 627 PDF_continue_text ........................................................................................................ 628 PDF_stringwidth............................................................................................................ 628 PDF_save....................................................................................................................... 628 PDF_restore................................................................................................................... 628 PDF_translate ................................................................................................................ 629 PDF_scale...................................................................................................................... 629 PDF_rotate..................................................................................................................... 630 PDF_setflat .................................................................................................................... 630 PDF_setlinejoin ............................................................................................................. 630 PDF_setlinecap.............................................................................................................. 631 PDF_setmiterlimit ......................................................................................................... 631 PDF_setlinewidth .......................................................................................................... 631 PDF_setdash .................................................................................................................. 631 PDF_moveto.................................................................................................................. 632 PDF_curveto.................................................................................................................. 632 PDF_lineto..................................................................................................................... 632 PDF_circle..................................................................................................................... 633 PDF_arc......................................................................................................................... 633 PDF_rect........................................................................................................................ 633 PDF_closepath............................................................................................................... 634 PDF_stroke .................................................................................................................... 634 PDF_closepath_stroke ................................................................................................... 634 PDF_fill ......................................................................................................................... 634
29
PDF_fill_stroke.............................................................................................................. 635 PDF_closepath_fill_stroke ............................................................................................ 635 PDF_endpath ................................................................................................................. 635 PDF_clip........................................................................................................................ 636 PDF_setgray_fill............................................................................................................ 636 PDF_setgray_stroke ...................................................................................................... 636 PDF_setgray .................................................................................................................. 637 PDF_setrgbcolor_fill ..................................................................................................... 637 PDF_setrgbcolor_stroke ................................................................................................ 637 PDF_setrgbcolor............................................................................................................ 637 PDF_add_outline........................................................................................................... 638 PDF_set_transition ........................................................................................................ 638 PDF_set_duration .......................................................................................................... 639 PDF_open_gif................................................................................................................ 639 PDF_open_png .............................................................................................................. 640 PDF_open_memory_image........................................................................................... 640 PDF_open_jpeg ............................................................................................................. 641 PDF_close_image.......................................................................................................... 641 PDF_place_image.......................................................................................................... 641 PDF_put_image............................................................................................................. 642 PDF_execute_image...................................................................................................... 642 pdf_add_annotation ....................................................................................................... 643 PDF_set_border_style ................................................................................................... 643 PDF_set_border_color................................................................................................... 643 PDF_set_border_dash.................................................................................................... 644 XLV. Perl-compatible Regular Expression functions ............................................................. 645 preg_match .................................................................................................................... 646 preg_match_all .............................................................................................................. 646 preg_replace................................................................................................................... 648 preg_split ....................................................................................................................... 649 preg_quote ..................................................................................................................... 650 preg_grep ....................................................................................................................... 650 Pattern Modifiers ........................................................................................................... 651 Pattern Syntax................................................................................................................ 652 XLVI. PHP options & information ......................................................................................... 678 error_log ........................................................................................................................ 679 error_reporting............................................................................................................... 680 extension_loaded ........................................................................................................... 680 getenv............................................................................................................................. 681 get_cfg_var .................................................................................................................... 681 get_current_user ............................................................................................................ 682 get_magic_quotes_gpc .................................................................................................. 682 get_magic_quotes_runtime............................................................................................ 682 getlastmod...................................................................................................................... 682
30
getmyinode .................................................................................................................... 683 getmypid ........................................................................................................................ 683 getmyuid ........................................................................................................................ 684 getrusage........................................................................................................................ 684 phpinfo........................................................................................................................... 684 phpversion ..................................................................................................................... 685 php_logo_guid............................................................................................................... 685 putenv ............................................................................................................................ 685 set_magic_quotes_runtime ............................................................................................ 686 set_time_limit ................................................................................................................ 686 zend_logo_guid ............................................................................................................. 687 XLVII. POSIX functions......................................................................................................... 688 posix_kill ....................................................................................................................... 689 posix_getpid .................................................................................................................. 689 posix_getppid ................................................................................................................ 689 posix_getuid .................................................................................................................. 689 posix_geteuid................................................................................................................. 690 posix_getgid .................................................................................................................. 690 posix_getegid................................................................................................................. 690 posix_setuid................................................................................................................... 690 posix_setgid................................................................................................................... 691 posix_getgroups............................................................................................................. 691 posix_getlogin ............................................................................................................... 691 posix_getpgrp ................................................................................................................ 691 posix_setsid ................................................................................................................... 692 posix_setpgid................................................................................................................. 692 posix_getpgid ................................................................................................................ 692 posix_getsid................................................................................................................... 693 posix_uname.................................................................................................................. 693 posix_times.................................................................................................................... 693 posix_ctermid ................................................................................................................ 694 posix_ttyname................................................................................................................ 694 posix_isatty.................................................................................................................... 694 posix_getcwd................................................................................................................. 694 posix_mkfifo.................................................................................................................. 695 posix_getgrnam ............................................................................................................. 695 posix_getgrgid ............................................................................................................... 695 posix_getpwnam............................................................................................................ 695 posix_getpwuid.............................................................................................................. 696 posix_getrlimit............................................................................................................... 697 XLVIII. PostgreSQL functions ............................................................................................... 699 pg_Close ........................................................................................................................ 701 pg_cmdTuples................................................................................................................ 701 pg_Connect.................................................................................................................... 701
31
pg_DBname................................................................................................................... 702 pg_ErrorMessage........................................................................................................... 702 pg_Exec ......................................................................................................................... 702 pg_Fetch_Array............................................................................................................. 703 pg_Fetch_Object............................................................................................................ 704 pg_Fetch_Row............................................................................................................... 705 pg_FieldIsNull............................................................................................................... 706 pg_FieldName ............................................................................................................... 706 pg_FieldNum................................................................................................................. 707 pg_FieldPrtLen .............................................................................................................. 707 pg_FieldSize .................................................................................................................. 707 pg_FieldType ................................................................................................................. 708 pg_FreeResult................................................................................................................ 708 pg_GetLastOid .............................................................................................................. 708 pg_Host.......................................................................................................................... 708 pg_loclose...................................................................................................................... 709 pg_locreate .................................................................................................................... 709 pg_loexport.................................................................................................................... 709 pg_loimport ................................................................................................................... 710 pg_loopen ...................................................................................................................... 710 pg_loread ....................................................................................................................... 710 pg_loreadall ................................................................................................................... 710 pg_lounlink.................................................................................................................... 711 pg_lowrite...................................................................................................................... 711 pg_NumFields ............................................................................................................... 711 pg_NumRows ................................................................................................................ 712 pg_Options .................................................................................................................... 712 pg_pConnect.................................................................................................................. 712 pg_Port .......................................................................................................................... 713 pg_Result....................................................................................................................... 713 pg_trace ......................................................................................................................... 713 pg_tty............................................................................................................................. 714 pg_untrace ..................................................................................................................... 714 XLIX. Program Execution functions ...................................................................................... 715 escapeshellcmd .............................................................................................................. 716 exec................................................................................................................................ 716 passthru.......................................................................................................................... 716 system ............................................................................................................................ 717 L. GNU Recode functions....................................................................................................... 718 recode_string ................................................................................................................. 719 recode ............................................................................................................................ 719 recode_file ..................................................................................................................... 719 LI. Regular expression functions ............................................................................................ 720 ereg ................................................................................................................................ 722
32
ereg_replace................................................................................................................... 722 eregi ............................................................................................................................... 723 eregi_replace.................................................................................................................. 723 split ................................................................................................................................ 723 sql_regcase..................................................................................................................... 724 LII. Semaphore and Shared Memory Functions ..................................................................... 726 sem_get.......................................................................................................................... 727 sem_acquire................................................................................................................... 727 sem_release.................................................................................................................... 727 shm_attach..................................................................................................................... 728 shm_detach .................................................................................................................... 728 shm_remove................................................................................................................... 728 shm_put_var .................................................................................................................. 729 shm_get_var................................................................................................................... 729 shm_remove_var............................................................................................................ 729 LIII. Session handling functions ............................................................................................. 730 session_start................................................................................................................... 734 session_destroy.............................................................................................................. 734 session_name................................................................................................................. 734 session_module_name................................................................................................... 735 session_save_path.......................................................................................................... 735 session_id ...................................................................................................................... 736 session_register.............................................................................................................. 736 session_unregister.......................................................................................................... 736 session_unset ................................................................................................................. 737 session_is_registered ..................................................................................................... 737 session_get_cookie_params .......................................................................................... 737 session_set_cookie_params........................................................................................... 738 session_decode .............................................................................................................. 738 session_encode .............................................................................................................. 738 LIV. SNMP functions ............................................................................................................. 740 snmpget.......................................................................................................................... 741 snmpset .......................................................................................................................... 741 snmpwalk....................................................................................................................... 741 snmpwalkoid.................................................................................................................. 742 snmp_get_quick_print ................................................................................................... 743 snmp_set_quick_print.................................................................................................... 743 LV. String functions ................................................................................................................ 745 AddCSlashes.................................................................................................................. 746 AddSlashes .................................................................................................................... 746 bin2hex .......................................................................................................................... 746 Chop .............................................................................................................................. 747 Chr ................................................................................................................................. 747 chunk_split .................................................................................................................... 747
33
convert_cyr_string ......................................................................................................... 748 count_chars.................................................................................................................... 748 crypt............................................................................................................................... 749 echo................................................................................................................................ 750 explode .......................................................................................................................... 750 flush ............................................................................................................................... 751 get_html_translation_table ............................................................................................ 751 get_meta_tags ................................................................................................................ 752 htmlentities .................................................................................................................... 753 htmlspecialchars ............................................................................................................ 753 implode .......................................................................................................................... 754 join................................................................................................................................. 754 levenshtein ..................................................................................................................... 754 ltrim ............................................................................................................................... 755 md5 ................................................................................................................................ 755 Metaphone ..................................................................................................................... 755 nl2br............................................................................................................................... 756 Ord................................................................................................................................. 756 parse_str......................................................................................................................... 756 print................................................................................................................................ 757 printf .............................................................................................................................. 757 quoted_printable_decode............................................................................................... 757 QuoteMeta ..................................................................................................................... 758 rawurldecode ................................................................................................................. 758 rawurlencode ................................................................................................................. 759 setlocale ......................................................................................................................... 759 similar_text .................................................................................................................... 760 soundex.......................................................................................................................... 760 sprintf............................................................................................................................. 761 strcasecmp ..................................................................................................................... 762 strchr .............................................................................................................................. 763 strcmp ............................................................................................................................ 763 strcspn............................................................................................................................ 763 strip_tags........................................................................................................................ 764 StripCSlashes................................................................................................................. 764 StripSlashes ................................................................................................................... 764 stristr .............................................................................................................................. 765 strlen .............................................................................................................................. 765 strpos.............................................................................................................................. 765 strrchr............................................................................................................................. 766 str_repeat ....................................................................................................................... 767 strrev .............................................................................................................................. 767 strrpos ............................................................................................................................ 767 strspn.............................................................................................................................. 768
34
strstr ............................................................................................................................... 768 strtok .............................................................................................................................. 769 strtolower ....................................................................................................................... 769 strtoupper....................................................................................................................... 770 str_replace...................................................................................................................... 770 strtr................................................................................................................................. 771 substr.............................................................................................................................. 772 substr_replace ................................................................................................................ 773 trim ................................................................................................................................ 774 ucfirst ............................................................................................................................. 774 ucwords.......................................................................................................................... 775 LVI. Shockwave Flash functions............................................................................................. 776 swf_openfile .................................................................................................................. 778 swf_closefile .................................................................................................................. 778 swf_labelframe .............................................................................................................. 778 swf_showframe.............................................................................................................. 778 swf_setframe.................................................................................................................. 779 swf_getframe ................................................................................................................. 779 swf_mulcolor................................................................................................................. 779 swf_addcolor ................................................................................................................. 779 swf_placeobject ............................................................................................................. 780 swf_modifyobject .......................................................................................................... 780 swf_removeobject.......................................................................................................... 781 swf_nextid ..................................................................................................................... 781 swf_startdoaction........................................................................................................... 781 swf_actiongotoframe ..................................................................................................... 781 swf_actiongeturl ............................................................................................................ 782 swf_actionnextframe ..................................................................................................... 782 swf_actionprevframe ..................................................................................................... 782 swf_actionplay............................................................................................................... 782 swf_actionstop............................................................................................................... 783 swf_actiontogglequality ................................................................................................ 783 swf_actionwaitforframe................................................................................................. 783 swf_actionsettarget ........................................................................................................ 783 swf_actiongotolabel....................................................................................................... 784 swf_enddoaction............................................................................................................ 784 swf_defineline................................................................................................................ 784 swf_definerect................................................................................................................ 784 swf_definepoly .............................................................................................................. 785 swf_startshape ............................................................................................................... 785 swf_shapelinesolid ........................................................................................................ 785 swf_shapefilloff ............................................................................................................. 786 swf_shapefillsolid .......................................................................................................... 786 swf_shapefillbitmaptile.................................................................................................. 786
35
swf_shapefillbitmaptile.................................................................................................. 786 swf_shapemoveto .......................................................................................................... 787 swf_shapelineto ............................................................................................................. 787 swf_shapecurveto .......................................................................................................... 787 swf_shapecurveto3 ........................................................................................................ 788 swf_shapearc ................................................................................................................. 788 swf_endshape ................................................................................................................ 788 swf_definefont ............................................................................................................... 788 swf_setfont .................................................................................................................... 789 swf_fontsize................................................................................................................... 789 swf_fontslant ................................................................................................................. 789 swf_fonttracking............................................................................................................ 789 swf_getfontinfo.............................................................................................................. 790 swf_definetext................................................................................................................ 790 swf_textwidth ................................................................................................................ 790 swf_definebitmap .......................................................................................................... 791 swf_getbitmapinfo......................................................................................................... 791 swf_startsymbol............................................................................................................. 791 swf_endsymbol.............................................................................................................. 791 swf_startbutton .............................................................................................................. 792 swf_addbuttonrecord ..................................................................................................... 792 swf_oncondition ............................................................................................................ 793 swf_endbutton ............................................................................................................... 793 swf_viewport ................................................................................................................. 794 swf_ortho....................................................................................................................... 794 swf_ortho2..................................................................................................................... 794 swf_perspective ............................................................................................................. 795 swf_polarview ............................................................................................................... 795 swf_lookat ..................................................................................................................... 795 swf_pushmatrix ............................................................................................................. 796 swf_popmatrix............................................................................................................... 796 swf_scale ....................................................................................................................... 796 swf_translate.................................................................................................................. 797 swf_rotate ...................................................................................................................... 797 swf_posround ................................................................................................................ 797 LVII. Sybase functions............................................................................................................ 798 sybase_affected_rows .................................................................................................... 799 sybase_close .................................................................................................................. 799 sybase_connect .............................................................................................................. 799 sybase_data_seek........................................................................................................... 800 sybase_fetch_array ........................................................................................................ 800 sybase_fetch_field ......................................................................................................... 801 sybase_fetch_object....................................................................................................... 801 sybase_fetch_row .......................................................................................................... 801
36
sybase_field_seek .......................................................................................................... 802 sybase_free_result ......................................................................................................... 802 sybase_num_fields......................................................................................................... 802 sybase_num_rows.......................................................................................................... 803 sybase_pconnect ............................................................................................................ 803 sybase_query ................................................................................................................. 803 sybase_result.................................................................................................................. 804 sybase_select_db ........................................................................................................... 804 LVIII. URL Functions ............................................................................................................. 806 base64_decode............................................................................................................... 807 base64_encode............................................................................................................... 807 parse_url ........................................................................................................................ 807 urldecode ....................................................................................................................... 807 urlencode ....................................................................................................................... 808 LIX. Variable Functions .......................................................................................................... 809 call_user_func................................................................................................................ 810 doubleval........................................................................................................................ 810 empty ............................................................................................................................. 810 gettype ........................................................................................................................... 811 intval .............................................................................................................................. 811 is_array .......................................................................................................................... 812 is_bool ........................................................................................................................... 812 is_double........................................................................................................................ 812 is_float ........................................................................................................................... 813 is_int .............................................................................................................................. 813 is_integer ....................................................................................................................... 813 is_long ........................................................................................................................... 814 is_numeric ..................................................................................................................... 814 is_object......................................................................................................................... 814 is_real ............................................................................................................................ 814 is_resource..................................................................................................................... 815 is_string ......................................................................................................................... 815 isset ................................................................................................................................ 815 print_r ............................................................................................................................ 816 settype............................................................................................................................ 817 strval .............................................................................................................................. 817 unset............................................................................................................................... 817 var_dump ....................................................................................................................... 818 LX. Vmailmgr functions ......................................................................................................... 819 vm_adduser.................................................................................................................... 820 vm_addalias................................................................................................................... 820 vm_passwd .................................................................................................................... 820 vm_delalias.................................................................................................................... 820 vm_deluser .................................................................................................................... 821
37
LXI. WDDX functions............................................................................................................ 822 wddx_serialize_value .................................................................................................... 824 wddx_serialize_vars ...................................................................................................... 824 wddx_packet_start ......................................................................................................... 825 wddx_packet_end .......................................................................................................... 825 wddx_add_vars.............................................................................................................. 825 wddx_deserialize ........................................................................................................... 825 LXII. XML parser functions ................................................................................................... 827 xml_parser_create.......................................................................................................... 837 xml_set_object............................................................................................................... 837 xml_set_element_handler.............................................................................................. 838 xml_set_character_data_handler ................................................................................... 839 xml_set_processing_instruction_handler ...................................................................... 840 xml_set_default_handler ............................................................................................... 841 xml_set_unparsed_entity_decl_handler ........................................................................ 841 xml_set_notation_decl_handler..................................................................................... 842 xml_set_external_entity_ref_handler ............................................................................ 843 xml_parse ...................................................................................................................... 844 xml_get_error_code....................................................................................................... 845 xml_error_string ............................................................................................................ 845 xml_get_current_line_number ...................................................................................... 846 xml_get_current_column_number ................................................................................ 846 xml_get_current_byte_index ......................................................................................... 847 xml_parser_free............................................................................................................. 847 xml_parser_set_option .................................................................................................. 847 xml_parser_get_option .................................................................................................. 848 utf8_decode ................................................................................................................... 849 utf8_encode ................................................................................................................... 849 V. Appendixes.................................................................................................................................. 851 A. Migrating from PHP/FI 2.0 to PHP 3.0.............................................................................. 852 About the incompatbilities in 3.0 .................................................................................. 852 Start/end tags ................................................................................................................. 852 if..endif syntax ............................................................................................................... 853 while syntax................................................................................................................... 854 Expression types............................................................................................................ 854 Error messages have changed........................................................................................ 855 Short-circuited boolean evaluation ................................................................................ 855 Function true/false return values ................................................................................... 855 Other incompatibilities .................................................................................................. 856 B. PHP development ............................................................................................................... 858 Adding functions to PHP3............................................................................................. 858 Function Prototype............................................................................................... 858 Function Arguments............................................................................................. 858 Variable Function Arguments .............................................................................. 858
38
Using the Function Arguments ............................................................................ 859 Memory Management in Functions ..................................................................... 860 Setting Variables in the Symbol Table ................................................................. 860 Returning simple values....................................................................................... 863 Returning complex values.................................................................................... 863 Using the resource list.......................................................................................... 865 Using the persistent resource table ...................................................................... 866 Adding runtime configuration directives ............................................................. 867 Calling User Functions .................................................................................................. 868 HashTable *function_table .................................................................................. 868 pval *object .......................................................................................................... 869 pval *function_name............................................................................................ 869 pval *retval........................................................................................................... 869 int param_count ................................................................................................... 869 pval *params[] ..................................................................................................... 869 Reporting Errors ............................................................................................................ 869 E_NOTICE........................................................................................................... 869 E_WARNING ...................................................................................................... 870 E_ERROR............................................................................................................ 870 E_PARSE ............................................................................................................. 870 E_CORE_ERROR ............................................................................................... 870 E_CORE_WARNING.......................................................................................... 870 C. The PHP Debugger............................................................................................................. 871 Using the Debugger ....................................................................................................... 871 Debugger Protocol......................................................................................................... 871
39
List of Tables
2-1. PHP Modules............................................................................................................................... 65 6-1. Escaped characters ...................................................................................................................... ?? 10-1. Arithmetic Operators............................................................................................................... 112 10-2. Bitwise Operators .................................................................................................................... 113 10-3. Comparison Operators............................................................................................................. 113 10-4. Increment/decrement Operators .............................................................................................. 115 10-5. Logical Operators .................................................................................................................... 116 10-6. Operator Precedence................................................................................................................ 116 1. Calendar modes ............................................................................................................................ 199 1. Calendar week modes ................................................................................................................... 200 1. Font file format ............................................................................................................................. 380 1. Returned Objects for imap_fetchstructure() .............................................................................. 396 2. Primary body type......................................................................................................................... 396 3. Transfer encodings........................................................................................................................ 397 1. Mailbox properties........................................................................................................................ 409 1. LONGVARBINARY handling ..................................................................................................... 563 1. error_log() log types .................................................................................................................... 679 1. error_reporting() bit values ........................................................................................................ 680 1. The user information array ........................................................................................................... 696 1. The user information array ........................................................................................................... 697 1. XML parser options...................................................................................................................... 848 1. UTF-8 encoding............................................................................................................................ 849 B-1. PHP Internal Types ................................................................................................................... 859 C-2. Debugger Error Types............................................................................................................... 872
List of Examples
1-1. An introductory example............................................................................................................. 49 5-1. Ways of escaping from HTML.................................................................................................... 83 6-1. Here doc string quoting example................................................................................................. 86 6-2. Some string examples.................................................................................................................. 87 7-1. Simple form variable ................................................................................................................. 103 7-2. More complex form variables ................................................................................................... 104 7-3. SetCookie Example ................................................................................................................... 105 8-1. Defining Constants .................................................................................................................... 108 8-2. Using __FILE__ and __LINE__ ............................................................................................... 108 11-1. include() in PHP3 and PHP4 .................................................................................................. 132 12-1. Variable function example....................................................................................................... 138 15-1. GIF creation with PHP ............................................................................................................ 144 16-1. HTTP Authentication example................................................................................................ 145 16-2. HTTP Authentication example forcing a new name/password ............................................... 146
40
18-1. File Upload Form .................................................................................................................... 148 18-2. Uploading multiple files .......................................................................................................... 149 19-1. Getting the title of a remote page ............................................................................................ 152 19-2. Storing data on a remote server ............................................................................................... 152 1. getallheaders() Example.............................................................................................................. 161 1. array() example............................................................................................................................ 168 1. array_count_values() example ................................................................................................... 168 1. array_flip() example .................................................................................................................... 169 1. array_keys() example .................................................................................................................. 169 1. array_merge() example ............................................................................................................... 170 1. array_pad() example ................................................................................................................... 171 1. array_pop() example ................................................................................................................... 171 1. array_push() example ................................................................................................................. 172 1. array_reverse() example ............................................................................................................. 172 1. array_shift() example .................................................................................................................. 173 1. array_slice() examples................................................................................................................. 174 1. array_splice() examples .............................................................................................................. 175 1. array_unshift() example.............................................................................................................. 176 1. array_values() example ............................................................................................................... 176 1. array_walk() example ................................................................................................................. 177 1. arsort() example........................................................................................................................... 178 1. asort() example ............................................................................................................................ 178 1. compact() example....................................................................................................................... 179 1. each() examples............................................................................................................................ 181 2. Traversing $HTTP_POST_VARS with each()............................................................................. 181 1. Extract() example ........................................................................................................................ 183 1. in_array() example ...................................................................................................................... 184 1. krsort() example .......................................................................................................................... 185 1. ksort() example ............................................................................................................................ 185 1. list() example ................................................................................................................................ 186 1. rsort() example............................................................................................................................. 189 1. shuffle() example.......................................................................................................................... 189 1. sort() example .............................................................................................................................. 190 1. uksort() example .......................................................................................................................... 191 1. usort() example ............................................................................................................................ 191 1. Aspell_new() ................................................................................................................................ 194 1. Aspell_check() ............................................................................................................................. 194 1. Aspell_check_raw()..................................................................................................................... 195 1. Aspell_suggest()........................................................................................................................... 195 1. Calendar functions ........................................................................................................................ 197 1. easter_date() example.................................................................................................................. 201 1. Easter_date() example................................................................................................................. 201 1. Text output .................................................................................................................................... 216 1. Text output .................................................................................................................................... 216
41
1. Save/Restore ................................................................................................................................. 222 1. Adding a page outline................................................................................................................... 232 1. gzopen() example.......................................................................................................................... 242 1. Date() example ............................................................................................................................. 256 2. Date() and mktime() example...................................................................................................... 256 1. Gmdate() example ....................................................................................................................... 258 1. Gmstrftime() example ................................................................................................................. 258 1. Mktime() example........................................................................................................................ 260 2. Last day of next month ................................................................................................................. 261 1. Strftime() example ....................................................................................................................... 262 1. Strtotime() example ..................................................................................................................... 263 1. Creating a dBase database file ...................................................................................................... 265 1. Using dbase_numfields()............................................................................................................. 268 1. Visiting every key/value pair in a dbm database........................................................................... 273 1. Dir() Example............................................................................................................................... 275 1. List all files in the current directory.............................................................................................. 276 2. List all files in the current directory and strip out . and ............................................................... 276 1. Mcrypt_get_cipher_name() example ......................................................................................... 282 1. Mcrypt_create_iv() example....................................................................................................... 283 1. basename() example .................................................................................................................... 290 1. copy() example ............................................................................................................................. 292 1. dirname() example....................................................................................................................... 293 1. diskfreespace() example .............................................................................................................. 293 1. Fgetcsv() example - Read and print entire contents of a CSV file ............................................... 295 1. Reading a file line by line ............................................................................................................. 296 1. fopen() example ............................................................................................................................ 302 1. Tempnam() example .................................................................................................................... 314 1. touch() example............................................................................................................................ 314 1. Accessing the form data................................................................................................................ 318 1. Populating a PDF document ......................................................................................................... 319 1. Gettext()-check ............................................................................................................................ 331 1. mhash_get_hash_name example .................................................................................................. 335 1. Traversing all hashes..................................................................................................................... 336 1. setcookie() examples .................................................................................................................... 339 1. modifying an attribute................................................................................................................... 361 2. adding a completely new attribute ................................................................................................ 362 3. modifying Title attribute ............................................................................................................... 362 4. modifying Title attribute ............................................................................................................... 362 5. removing attribute......................................................................................................................... 363 1. GetImageSize................................................................................................................................ 368 2. GetImageSize returning IPTC ...................................................................................................... 368 1. Example to handle an error during creation (courtesy vic@zymsys.com)................................... 374 1. Example to handle an error during creation (courtesy vic@zymsys.com ).................................. 375 1. Example to handle an error during creation (courtesy vic@zymsys.com)................................... 376
42
1. ImageTTFText .............................................................................................................................. 388 1. imap_append() example.............................................................................................................. 390 1. imap_mailboxmsginfo() example ............................................................................................... 391 1. imap_createmailbox() example .................................................................................................. 393 1. imap_getmailboxes() example .................................................................................................... 400 1. imap_getmailboxes() example .................................................................................................... 401 1. imap_open() example .................................................................................................................. 404 1. imap_rfc822_write_address() example...................................................................................... 409 1. imap_rfc822_parse_adrlist() example ....................................................................................... 410 1. imap_setflag_full() example........................................................................................................ 411 1. imap_status() example ................................................................................................................ 416 1. imap_fetch_overview() example................................................................................................. 418 1. imap_mime_header_decode() example ..................................................................................... 419 1. Connect to a Informix database .................................................................................................... 423 1. Closing a Informix connection ..................................................................................................... 424 1. Show all rows of the "orders" table as a html table ...................................................................... 425 2. Insert some values into the "catalog" table ................................................................................... 425 1. Informix affected rows.................................................................................................................. 428 1. Retrieve Informix sqlca.sqlerrd[x] values..................................................................................... 429 1. Informix fetch rows ...................................................................................................................... 430 1. Informix results as HTML table ................................................................................................... 431 1. Fielnames and SQL fieldtypes ...................................................................................................... 432 1. Informix SQL fieldproperties ....................................................................................................... 432 1. Ibase_connect() example ............................................................................................................. 441 1. Complete example with authenticated bind.................................................................................. 450 1. Show the list of attributes held for a particular directory entry .................................................... 455 1. List all values of the "mail" attribute for a directory entry ........................................................... 457 1. Produce a list of all organizational units of an organization......................................................... 459 1. LDAP search................................................................................................................................. 461 1. Enumerating all LDAP error messages ........................................................................................ 462 1. Generating and catching an error.................................................................................................. 463 1. Sending mail. ................................................................................................................................ 466 2. Sending mail with extra headers................................................................................................... 466 1. base_convert()............................................................................................................................... 469 1. Defining Constants........................................................................................................................ 503 1. die example ................................................................................................................................... 504 1. Eval() example - simple text merge.............................................................................................. 504 1. Get_browser() example ............................................................................................................... 508 1. Pack() format string ..................................................................................................................... 511 1. Serialize() example ...................................................................................................................... 512 1. Unpack() format string................................................................................................................. 513 1. Unserialize() example .................................................................................................................. 514 1. Msql_tablename() example......................................................................................................... 529 1. MySQL close example ................................................................................................................. 532
43
1. MySQL connect example ............................................................................................................. 533 1. MySQL create database example ................................................................................................. 533 1. MySQL data seek example ........................................................................................................... 534 1. Mysql_fetch_array() ................................................................................................................... 537 1. Mysql_fetch_field() ..................................................................................................................... 538 1. mysql fetch object......................................................................................................................... 540 1. mysql field types ........................................................................................................................... 542 1. mysql_query() ............................................................................................................................. 546 2. mysql_query() ............................................................................................................................. 547 1. Mysql_tablename() Example ...................................................................................................... 548 1. Fsockopen() Example .................................................................................................................. 552 1. Example for the default domain ................................................................................................... 558 1. Example for the NIS order............................................................................................................ 558 1. Example for the NIS master ......................................................................................................... 559 1. Example for NIS match ................................................................................................................ 559 1. Example for the NIS first.............................................................................................................. 560 1. Example for NIS next ................................................................................................................... 560 1. ODBC Setoption Examples .......................................................................................................... 573 1. OCIDefineByName....................................................................................................................... 592 1. OCIDefineByName....................................................................................................................... 593 1. OCILogon ....................................................................................................................................-999 1. OCINLogon .................................................................................................................................. 597 1. OCINewDescriptor ....................................................................................................................... 600 1. OCIRowCount .............................................................................................................................. 602 1. OCINumCols ................................................................................................................................ 603 1. OCIFetchStatement....................................................................................................................... 604 1. OCIColumnSize............................................................................................................................ 606 1. OCIServerVersion......................................................................................................................... 607 1. Code examples.............................................................................................................................. 608 1. Using a REF CURSOR from a stored procedure ......................................................................... 608 2. Using a REF CURSOR in a select statement ............................................................................... 609 1. OCIColumnName ......................................................................................................................... 610 1. OCIColumnType........................................................................................................................... 611 1. Setting document information ...................................................................................................... 620 1. Save and Restore........................................................................................................................... 629 1. Translation .................................................................................................................................... 629 1. Scaling .......................................................................................................................................... 630 1. Including a gif image .................................................................................................................... 639 1. Including a PNG image ................................................................................................................ 640 1. Including a memory image ........................................................................................................... 640 1. Multiple show of an image ........................................................................................................... 642 1. Getting the page number out of a string ....................................................................................... 646 1. Getting all phone numbers out of some text. ................................................................................ 647 1. Replacing several values............................................................................................................... 648
44
2. Using /e modifier .......................................................................................................................... 649 1. Getting parts of search string........................................................................................................ 649 1. preg_grep() example.................................................................................................................... 650 1. error_log() examples ................................................................................................................... 679 1. getlastmod() example.................................................................................................................... 683 1. Getrusage Example....................................................................................................................... 684 1. phpversion() example ................................................................................................................... 685 1. Setting an Environment Variable .................................................................................................. 686 1. pg_cmdtuples................................................................................................................................ 701 1. PostgreSQL fetch array................................................................................................................. 703 1. Postgres fetch object ..................................................................................................................... 704 1. Postgres fetch row......................................................................................................................... 706 1. ereg() example .............................................................................................................................. 722 1. ereg_replace() example................................................................................................................. 723 1. split() example .............................................................................................................................. 724 2. split() example .............................................................................................................................. 724 1. sql_regcase() example................................................................................................................... 725 1. session_name() examples ............................................................................................................ 735 1. Addcslashes() example ................................................................................................................ 746 1. Chop() example............................................................................................................................ 747 1. Chr() example .............................................................................................................................. 747 1. Chunk_split() example ................................................................................................................ 748 1. Echo() example ............................................................................................................................ 750 1. Explode() example ....................................................................................................................... 751 1. Translation Table Example ........................................................................................................... 752 1. Meta Tags Example ...................................................................................................................... 752 1. Implode() example ....................................................................................................................... 754 1. Ord() example .............................................................................................................................. 756 1. Using parse_str() ......................................................................................................................... 757 1. Rawurlencode() example 1 ......................................................................................................... 759 2. Rawurlencode() example 2 ......................................................................................................... 759 1. Soundex Examples........................................................................................................................ 761 1. Sprintf(): zero-padded integers .................................................................................................... 762 2. Sprintf(): formatting currency ..................................................................................................... 762 1. strcasecmp() example .................................................................................................................. 763 1. Strrchr() example ........................................................................................................................ 767 1. Str_repeat() example ................................................................................................................... 767 1. Strstr() example ........................................................................................................................... 768 1. Strtok() example .......................................................................................................................... 769 1. Strtolower() example ................................................................................................................... 770 1. Strtoupper() example .................................................................................................................. 770 1. Str_replace() example ................................................................................................................. 771 1. Strtr() example............................................................................................................................. 771 1. Substr_replace() example ........................................................................................................... 773
45
1. ucfirst() example .......................................................................................................................... 774 1. ucwords() example....................................................................................................................... 775 1. Swf_addbuttonrecord() function example ................................................................................. 792 1. Urldecode() example.................................................................................................................... 808 1. Urlencode() example.................................................................................................................... 808 1. Unset() example ........................................................................................................................... 818 1. wddx_serialize_vars example ....................................................................................................... 824 A-1. Migration: old start/end tags..................................................................................................... 852 A-2. Migration: first new start/end tags ............................................................................................ 852 A-3. Migration: second new start/end tags ....................................................................................... 852 A-4. Migration: third new start/end tags........................................................................................... 853 A-5. Migration: old if..endif syntax.................................................................................................. 853 A-6. Migration: new if..endif syntax ................................................................................................ 853 A-7. Migration: old while..endwhile syntax..................................................................................... 854 A-8. Migration: new while..endwhile syntax ................................................................................... 854 A-9. Migration from 2.0: return values, old code............................................................................. 856 A-10. Migration from 2.0: return values, new code ......................................................................... 856 A-11. Migration from 2.0: concatenation for strings........................................................................ 857 B-1. Fetching function arguments .................................................................................................... 858 B-2. Variable function arguments ..................................................................................................... 859 B-3. Checking whether $foo exists in a symbol table ...................................................................... 861 B-4. Finding a variable’s size in a symbol table ............................................................................... 861 B-5. Initializing a new array ............................................................................................................. 861 B-6. Adding entries to a new array ................................................................................................... 862 B-7. Adding a new resource ............................................................................................................. 865 B-8. Using an existing resource........................................................................................................ 865 B-9. Deleting an existing resource.................................................................................................... 866 C-1. Example Debugger Message .................................................................................................... 873
46
Preface
PHP, which stands for "PHP: Hypertext Preprocessor", is an HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly.
About this Manual
This manual is written in XML using the DocBook XML DTD (http://www.nwalsh.com/docbook/xml/), using DSSSL (http://www.jclark.com/dsssl/) (Document Style and Semantics Specification Language) for formatting. The tools used for formatting HTML, TeX and RTF versions are Jade (http://www.jclark.com/jade/), written by James Clark (http://www.jclark.com/bio.htm) and The Modular DocBook Stylesheets (http://nwalsh.com/docbook/dsssl/) written by Norman Walsh (http://nwalsh.com/). PHP’s documentation framework is maintained by Stig Sæther Bakken (mailto:stig@php.net). Daily HTML snapshots of the manual, including translations, can be found at http://snaps.php.net/manual/.
47
I. Getting Started
Chapter 1. Introduction
What is PHP?
PHP (officially "PHP: Hypertext Preprocessor") is a server-side HTML-embedded scripting language. Simple answer, but what does that mean? An example: Example 1-1. An introductory example
1 2 3 4
Example 5 6 7 8 9 10
Notice how this is different from a CGI script written in other languages like Perl or C -- instead of writing a program with lots of commands to output HTML, you write an HTML script with a some embedded code to do something (in this case, output some text). The PHP code is enclosed in special start and end tags that allow you to jump into and out of PHP mode. What distinguishes PHP from something like client-side Javascript is that the code is executed on the server. If you were to have a script similar to the above on your server, the client would receive the results of running that script, with no way of determining what the underlying code may be. You can even configure your web server to process all your HTML files with PHP, and then there’s really no way that users can tell what you have up your sleeve.
What can PHP do?
At the most basic level, PHP can do anything any other CGI program can do, such as collect form data, generate dynamic page content, or send and receive cookies. Perhaps the strongest and most significant feature in PHP is its support for a wide range of databases. Writing a database-enabled web page is incredibly simple. The following databases are currently supported:
Adabas D InterBase Solid
49
Chapter 1. Introduction
dBase Empress FilePro Informix
mSQL Sybase MySQL Velocis Oracle Unix dbm PostgreSQL
PHP also has support for talking to other services using protocols such as IMAP, SNMP, NNTP, POP3, or even HTTP. You can also open raw network sockets and interact using other protocols.
A brief history of PHP
PHP was conceived sometime in the fall of 1994 by Rasmus Lerdorf (mailto:rasmus@php.net). Early non-released versions were used on his home page to keep track of who was looking at his online resume. The first version used by others was available sometime in early 1995 and was known as the Personal Home Page Tools. It consisted of a very simplistic parser engine that only understood a few special macros and a number of utilities that were in common use on home pages back then. A guestbook, a counter and some other stuff. The parser was rewritten in mid-1995 and named PHP/FI Version 2. The FI came from another package Rasmus had written which interpreted html form data. He combined the Personal Home Page tools scripts with the Form Interpreter and added mSQL support and PHP/FI was born. PHP/FI grew at an amazing pace and people started contributing code to it. It is difficult to give any hard statistics, but it is estimated that by late 1996 PHP/FI was in use on at least 15,000 web sites around the world. By mid-1997 this number had grown to over 50,000. Mid-1997 also saw a change in the development of PHP. It changed from being Rasmus’ own pet project that a handful of people had contributed to, to being a much more organized team effort. The parser was rewritten from scratch by Zeev Suraski and Andi Gutmans and this new parser formed the basis for PHP Version 3. A lot of the utility code from PHP/FI was ported over to PHP3 and a lot of it was completely rewritten. Today (end-1999) either PHP/FI or PHP3 ships with a number of commercial products such as C2’s StrongHold web server and RedHat Linux. A conservative estimate based on an extrapolation from numbers provided by NetCraft (http://www.netcraft.com/) (see also Netcraft Web Server Survey (http://www.netcraft.com/survey/)) would be that PHP is in use on over 1,000,000 sites around the world. To put that in perspective, that is more sites than run Netscape’s flagship Enterprise server on the Internet. Also as of this writing, work is underway on the next generation of PHP, which will utilize the powerful Zend (http://www.zend.com/) scripting engine to deliver higher performance, and will also support running under webservers other than Apache as a native server module.
50
Chapter 2. Installation
Downloading the latest version
The source code, and binary distributions for some platforms (including Windows), can be found at http://www.php.net/.
Installation on UNIX systems
This section will guide you through the configuration and installation of PHP. Prerequisite knowledge and software:
• • •
Basic UNIX skills (being able to operate "make" and a C compiler) An ANSI C compiler A web server
Quick Installation Instructions (Apache Module Version)
1 2 3 4 5 6 7 8 9
1. gunzip apache_1.3.x.tar.gz 2. tar xvf apache_1.3.x.tar 3. gunzip php-3.0.x.tar.gz 4. tar xvf php-3.0.x.tar 5. cd apache_1.3.x 6. ./configure --prefix=/www 7. cd ../php-3.0.x 8. ./configure --with-mysql --with-apache=../apache_1.3.x --enabletrack-vars 10 9. make 11 10. make install 12 11. cd ../apache_1.3.x 13 12. ./configure --prefix=/www --activatemodule=src/modules/php3/libphp3.a 14 13. make 15 14. make install
16 17 18 19
Instead of this step you may prefer to simply copy the httpd binary overtop of your existing binary. Make sure you shut down your server first though.
51
Chapter 2. Installation
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
15. cd ../php-3.0.x 16. cp php3.ini-dist /usr/local/lib/php3.ini You can edit /usr/local/lib/php3.ini file to set PHP options. you prefer this file in another location, use --with-config-file-path=/path in step 8. 17. Edit your httpd.conf or srm.conf file and add: AddType application/x-httpd-php3 .php3 You can choose any extension you wish here. we suggest. .php3 is simply the one If
18. Use your normal procedure for starting the Apache server. (You must stop and restart the server, not just cause the server to reload by use a HUP or USR1 signal.)
Configuration
There are two ways of configuring PHP.
•
Using the "setup" script that comes with PHP. This script asks you a series of questions (almost like the "install" script of PHP/FI 2.0) and runs "configure" in the end. To run this script, type ./setup. This script will also create a file called "do-conf", this file will contain the options passed to configure. You can edit this file to change just a few options without having to re-run setup. Then type ./do-conf to run configure with the new options.
•
Running configure by hand. To see what options you have, type ./configure --help.
Details about some of the different configuration options are listed below.
Apache module
To build PHP as an Apache module, answer "yes" to "Build as an Apache module?" (the --with-apache=DIR option to configure) and specify the Apache distribution base directory. If you have unpacked your Apache distribution in /usr/local/www/apache_1.2.4, this is your Apache distribution base directory. The default directory is /usr/local/etc/httpd.
52
Chapter 2. Installation
fhttpd module
To build PHP as an fhttpd module, answer "yes" to "Build as an fhttpd module?" (the --with-fhttpd=DIR option to configure) and specify the fhttpd source base directory. The default directory is /usr/local/src/fhttpd. If you are running fhttpd, building PHP as a module will give better performance, more control and remote execution capability.
CGI version
The default is to build PHP as a CGI program. If you are running a web server PHP has module support for, you should generally go for that solution for performance reasons. However, the CGI version enables Apache users to run different PHP-enabled pages under different user-ids. Please make sure you read through the Security chapter if you are going to run PHP as a CGI.
Database Support Options
PHP has native support for a number of databases (as well as ODBC):
Adabas D
--with-adabas=DIR
Compiles with Adabas D support. The parameter is the Adabas D install directory and defaults to /usr/local/adabasd. Adabas home page (http://www.adabas.com/)
dBase
--with-dbase
Enables the bundled DBase support. No external libraries are required.
filePro
--with-filepro
Enables the bundled read-only filePro support. No external libraries are required.
53
Chapter 2. Installation
mSQL
--with-msql=DIR
Enables mSQL support. The parameter to this option is the mSQL install directory and defaults to /usr/local/Hughes. This is the default directory of the mSQL 2.0 distribution. configure automatically detects which mSQL version you are running and PHP supports both 1.0 and 2.0, but if you compile PHP with mSQL 1.0, you can only access mSQL 1.0 databases, and vice-versa. See also mSQL Configuration Directives in the configuration file. mSQL home page (http://www.hughes.com.au/)
MySQL
--with-mysql=DIR
Enables MySQL support. The parameter to this option is the MySQL install directory and defaults to /usr/local. This is the default installation directory of the MySQL distribution. See also MySQL Configuration Directives in the configuration file. MySQL home page (http://www.mysql.com/)
iODBC
--with-iodbc=DIR
Includes iODBC support. This feature was first developed for iODBC Driver Manager, a freely redistributable ODBC driver manager which runs under many flavors of UNIX. The parameter to this option is the iODBC installation directory and defaults to /usr/local. FreeODBC home page (http://users.ids.net/~bjepson/freeODBC/) or iODBC home page (http://www.iodbc.org/)
OpenLink ODBC
--with-openlink=DIR
Includes OpenLink ODBC support. The parameter to this option is the OpenLink ODBC installation directory and defaults to /usr/local/openlink. OpenLink Software’s home page (http://www.openlinksw.com/)
54
Chapter 2. Installation
Oracle
--with-oracle=DIR
Includes Oracle support. Has been tested and should be working at least with Oracle versions 7.0 through 7.3. The parameter is the ORACLE_HOME directory. You do not have to specify this parameter if your Oracle environment has been set up. Oracle home page (http://www.oracle.com/)
PostgreSQL
--with-pgsql=DIR
Includes PostgreSQL support. The parameter is the PostgreSQL base install directory and defaults to /usr/local/pgsql. See also Postgres Configuration Directives in the configuration file. PostgreSQL home page (http://www.postgresql.org/)
Solid
--with-solid=DIR
Includes Solid support. The parameter is the Solid install directory and defaults to /usr/local/solid. Solid home page (http://www.solidtech.com/)
Sybase
--with-sybase=DIR
Includes Sybase support. The parameter is the Sybase install directory and defaults to /home/sybase. See also Sybase Configuration Directives in the configuration file. Sybase home page (http://www.sybase.com/)
55
Chapter 2. Installation
Sybase-CT
--with-sybase-ct=DIR
Includes Sybase-CT support. The parameter is the Sybase-CT install directory and defaults to /home/sybase. See also Sybase-CT Configuration Directives in the configuration file.
Velocis
--with-velocis=DIR
Includes Velocis support. The parameter is the Velocis install directory and defaults to /usr/local/velocis. Velocis home page (http://www.raima.com/)
A custom ODBC library
--with-custom-odbc=DIR
Includes support for an arbitrary custom ODBC library. The parameter is the base directory and defaults to /usr/local. This option implies that you have defined CUSTOM_ODBC_LIBS when you run the configure script. You also must have a valid odbc.h header somewhere in your include path. If you don’t have one, create it and include your specific header from there. Your header may also require some extra definitions, particularly when it is multiplatform. Define them in CFLAGS. For example, you can use Sybase SQL Anywhere on QNX as following: CFLAGS=-DODBC_QNX
LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50
Unified ODBC
--disable-unified-odbc
Disables the Unified ODBC module, which is a common interface to all the databases with ODBC-based interfaces, such as Solid and Adabas D. It also works for normal ODBC libraries. Has been tested with iODBC, Solid, Adabas D and Sybase SQL Anywhere. Requires that one (and only one) of these modules or the Velocis module is enabled, or a custom ODBC library specified. This
56
Chapter 2. Installation
option is only applicable if one of the following options is used: --with-iodbc, --with-solid, --with-adabas, --with-velocis, or --with-custom-odbc. See also Unified ODBC Configuration Directives in the configuration file.
LDAP
--with-ldap=DIR
Includes LDAP (Lightweight Directory Access Protocol) support. The parameter is the LDAP base install directory, defaults to /usr/local/ldap. More information about LDAP can be found in RFC1777 (http://www.faqs.org/rfcs/rfc1777.html) and RFC1778 (http://www.faqs.org/rfcs/rfc1778.html).
Other configure options
--with-mcrypt=DIR
--with-mcrypt
Include support for the mcrypt library. See the mcrypt documentation for more information. If you use the optional DIR argument, PHP will look for mcrypt.h in DIR/include.
--enable-sysvsem
--enable-sysvsem
Include support for Sys V semaphores (supported by most Unix derivates). See the Semaphore and Shared Memory documentation for more information.
--enable-sysvshm
--enable-sysvshm
Include support for Sys V shared memory (supported by most Unix derivates). See the Semaphore and Shared Memory documentation for more information.
57
Chapter 2. Installation
--with-xml
--with-xml
Include support for a non-validating XML parser using James Clark’s expat library (http://www.jclark.com/xml/). See the XML function reference for details.
--enable-maintainer-mode
--enable-maintainer-mode
Turns on extra dependencies and compiler warnings used by some of the PHP developers.
--with-system-regex
--with-system-regex
Uses the system’s regular expression library rather than the bundled one. If you are building PHP as a server module, you must use the same library when building PHP as when linking the server. Enable this if the system’s library provides special features you need. It is recommended that you use the bundled library if possible.
--with-config-file-path
--with-config-file-path=DIR
The path used to look for the configuration file when PHP starts up.
--with-exec-dir
--with-exec-dir=DIR
Only allow running of executables in DIR when in safe mode. Defaults to /usr/local/bin. This option only sets the default, it may be changed with the safe_mode_exec_dir directive in the configuration file later.
58
Chapter 2. Installation
--enable-debug
--enable-debug
Enables extra debug information. This makes it possible to gather more detailed information when there are problems with PHP. (Note that this doesn’t have anything to do with debugging facilities or information available to PHP scripts.)
--enable-safe-mode
--enable-safe-mode
Enables "safe mode" by default. This imposes several restrictions on what PHP can do, such as opening only files within the document root. Read the Security chapter for more more information. CGI users should always enable secure mode. This option only sets the default, it may be enabled or disabled with the safe_mode directive in the configuration file later.
--enable-track-vars
--enable-track-vars
Makes PHP keep track of where GET/POST/cookie variables come from in the arrays HTTP_GET_VARS, HTTP_POST_VARS and HTTP_COOKIE_VARS. This option only sets the default, it may be enabled or disabled with the track_vars directive in the configuration file later.
--enable-magic-quotes
--enable-magic-quotes
Enable magic quotes by default. This option only sets the default, it may be enabled or disabled with the magic_quotes_runtime directive in the configuration file later. See also the magic_quotes_gpc and the magic_quotes_sybase directives.
--enable-debugger
--enable-debugger
59
Chapter 2. Installation
Enables the internal PHP debugger support. This feature is still in an experimental state. See also the Debugger Configuration directives in the configuration file.
--enable-discard-path
--enable-discard-path
If this is enabled, the PHP CGI binary can safely be placed outside of the web tree and people will not be able to circumvent .htaccess security. Read the section in the security chapter about this option.
--enable-bcmath
--enable-bcmath
Enables bc style arbitrary precision math functions. See also the bcmath.scale option in the configuration file.
--enable-force-cgi-redirect
--enable-force-cgi-redirect
Enable the security check for internal server redirects. You should use this if you are running the CGI version with Apache. When using PHP as a CGI binary, PHP by default always first checks that it is used by redirection (for example under Apache, by using Action directives). This makes sure that the PHP binary cannot be used to bypass standard web server authentication procedures by calling it directly, like http://my.host/cgi-bin/php/secret/doc.html. This example accesses http://my.host/secret/doc.html but does not honour any security settings enforced by httpd for directory /secret. Not enabling option disables the check and enables bypassing httpd security and authentication settings. Do this only if your server software is unable to indicate that a safe redirection was done and all your files under your document root and user directories may be accessed by anyone. Read the section in the security chapter about this option.
--disable-short-tags
--disable-short-tags
60
Chapter 2. Installation
Disables the short form ?> PHP tags. You must disable the short form if you want to use PHP with XML. With short tags disabled, the only PHP code tag is . This option only sets the default, it may be enabled or disabled with the short_open_tag directive in the configuration file later.
--enable-url-includes
--enable-url-includes
Makes it possible to run code on other HTTP or FTP servers directly from PHP with include(). See also the include_path option in the configuration file.
--disable-syntax-hl
--disable-syntax-hl
Turns off syntax highlighting.
CPPFLAGS and LDFLAGS
To make the PHP installation look for header or library files in different directories, modify the CPPFLAGS and LDFLAGS environment variables, respectively. If you are using a sensible shell, you should be able to do LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure
Building
When PHP is configured, you are ready to build the CGI executable or the PHP library. The command make should take care of this. If it fails and you can’t figure out why, see the Problems section.
Testing
If you have built PHP as a CGI program, you may test your build by typing make test. It is always a good idea to test your build. This way you may catch a problem with PHP on your platform early instead of having to struggle with it later.
61
Chapter 2. Installation
Benchmarking
If you have built PHP as a CGI program, you may benchmark your build by typing make bench. Note that if safe mode is on by default, the benchmark may not be able to finish if it takes longer then the 30 seconds allowed. This is because the set_time_limit() can not be used in safe mode. Use the max_execution_time configuration setting to control this time for your own scripts. make bench ignores the configuration file.
Installation on Windows 95/98/NT systems
This install guide will help you install and configure PHP on your Windows 9x/NT webservers. This guide was compiled by Bob Silva (mailto:bob_silva@mail.umesd.k12.or.us). The latest revision can be found at http://www.umesd.k12.or.us/php/win32install.html. This guide provides installation support for:
• • • •
Personal Web Server (Newest version recommended) Internet Information Server 3 or 4 Apache 1.3.x Omni HTTPd 2.0b1
General Installation Steps
The following steps should be performed on all installations before the server specific instructions.
• •
Extract the distribution file to a directory of your choice. "C:\PHP3\" is a good start. Copy the file, ’php3.ini-dist’ to your ’%WINDOWS%’ directory and rename it to ’php3.ini’. Your ’%WINDOWS%’ directory is typically: c:\windows for Windows 95/98 c:\winnt or c:\winnt40 for NT servers
•
Edit your ’php3.ini’ file:
•
You will need to change the ’extension_dir’ setting to point to your php-install-dir, or where you have placed your ’php3_*.dll’ files. ex: c:\php3 If you are using Omni Httpd, do not follow the next step. Set the ’doc_root’ to point to your webservers document_root. ex: c:\apache\htdocs or c:\webroot Choose which modules you would like to load when PHP starts. You can uncomment the: ’extension=php3_*.dll’ lines to load these modules. Some modules require you to have
•
•
62
Chapter 2. Installation
additional libraries installed on your system for the module to work correctly. The PHP FAQ (http://www.php.net/FAQ.php) has more information on where to get supporting libraries. You can also load a module dynamically in your script using: dl("php_*.dll");
•
On PWS and IIS, you can set the browscap.ini to point to: ’c:\windows\system\inetsrv\browscap.ini’ on Windows 95/98 and ’c:\winnt\system32\inetsrv\browscap.ini’ on NT Server. Additional information on using the browscap functionality in PHP can be found at this mirror (http://php.netvision.net.il/browser-id.php3), select the "source" button to see it in action.
The DLLs for PHP extensions are prefixed with ’php3_’. This prevents confusion between PHP extensions and their supporting libraries.
Windows 95/98/NT and PWS/IIS 3
The recommended method for configuring these servers is to use the INF file included with the distribution (php_iis_reg.inf). You may want to edit this file and make sure the extensions and PHP install directories match your configuration. Or you can follow the steps below to do it manually. WARNING: These steps involve working directly with the windows registry. One error here can leave your system in an unstable state. We highly recommend that you back up your registry first. The PHP Development team will not be held responsible if you damage your registry. Run Regedit. Navigate to: HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services /W3Svc /Parameters /ScriptMap. On the edit menu select: New->String Value. Type in the extension you wish to use for your php scripts. ex: .php3 Double click on the new string value and enter the path to php.exe in the value data field. ex: c:\php3\php.exe %s %s. The ’%s %s’ is VERY important, PHP will not work properly without it.
• • • • •
• •
• • •
Repeat these steps for each extension you wish to associate with PHP scripts. Now navigate to: HKEY_CLASSES_ROOT On the edit menu select: New->Key. Name the key to the extension you setup in the previous section. ex: .php3 Highlight the new key and in the right side pane, double click the "default value" and enter
phpfile.
• •
Repeat the last step for each extension you set up in the previous section. Now create another New->Key under HKEY_CLASSES_ROOT and name it phpfile.
63
Chapter 2. Installation
•
Highlight the new key phpfile and in the right side pane, double click the "default value" and enter PHP Script. Right click on the phpfile key and select New->Key, name it Shell. Right click on the Shell key and select New->Key, name it open. Right click on the open key and select New->Key, name it command. Highlight the new key command and in the right side pane, double click the "default value" and enter the path to php.exe. ex: c:\php3\php.exe -q %1. (don’t forget the %1). Exit Regedit.
• • • •
•
PWS and IIS 3 users now have a fully operational system. IIS 3 users can use a nifty tool (http://www.genusa.com/iis/iiscfg.html) from Steven Genusa to configure their script maps.
Windows NT and IIS 4
To install PHP on an NT Server running IIS 4, follow these instructions: In Internet Service Manager (MMC), select the Web site or the starting point directory of an application. Open the directory’s property sheets (by right clicking and selecting properties), and then click the Home Directory, Virtual Directory, or Directory tab. Click the Configuration button, and then click the App Mappings tab. Click Add, and in the Executable box, type: c:\path-to-php-dir\php.exe %s %s. You MUST have the %s %s on the end, PHP will not function properly if you fail to do this. In the Extension box, type the file name extension you want associated with PHP scripts. (You must repeat step 5 and 6 for each extension you want accociated with PHP scripts. (.php3 and .phtml are common.) Set up the appropriate security. (This is done in Internet Service Manager), and if your NT Server uses NTFS file system, add execute rights for I_USR_ to the directory that contains php.exe.
•
•
• •
•
•
Windows 9x/NT and Apache 1.3.x
You must edit your srm.conf or httpd.conf to configure Apache to work with the PHP CGI binary. Although there can be a few variations of configuring PHP under Apache, this one is simple enough to be used by the newcomer. Please consult the Apache Docs for further configuration directives.
•
ScriptAlias /php3/ "c:/path-to-php-dir/"
64
Chapter 2. Installation
• • •
AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3 .phtml Action application/x-httpd-php3 "/php3/php.exe"
To use the source code highlighting feature, simply create a PHP script file and stick this code in: . Substitute original_php_script.php3 with the name of the file you wish to show the source of. (this is only one way of doing it). Note: On Win-Apache all back slashes in a path statement such as: "c:\directory\file.ext", must be converted to forward slashes.
Omni HTTPd 2.0b1 for Windows
This has got to be the easiest config there is: Step 1: Install Omni server Step 2: Right click on the blue OmniHTTPd icon in the system tray and select Properties Step 3: Click on Web Server Global Settings Step 4: On the ’External’ tab, enter: virtual = .php3 | actual = c:\path-to-php-dir\php.exe Step 5: On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php3 Step 6: Click OK Repeat steps 2 - 6 for each extension you want to associate with PHP.
PHP Modules
Table 2-1. PHP Modules php3_calendar.dll php3_crypt.dll php3_dbase.dll php3_dbm.dll php3_filepro.dll php3_gd.dll php3_hyperwave.dll php3_imap4r2.dll php3_ldap.dll php3_msql1.dll php3_msql2.dll Calendar conversion functions Crypt functions DBase functions GDBM emulation via Berkely DB2 library READ ONLY access to filepro databases GD Library functions for gif manipulation HyperWave functions IMAP 4 functions LDAP functions mSQL 1 client mSQL 2 client
65
Chapter 2. Installation
php3_mssql.dll php3_mysql.dll php3_nsmail.dll php3_oci73.dll php3_snmp.dll php3_zlib.dll
MSSQL client (requires MSSQL DB-Libraries MySQL functions Netscape mail functions Oracle functions SNMP get and walk functions (NT only!) ZLib functions
Problems?
Read the FAQ
Some problems are more common than others. The most common ones are listed in the PHP FAQ, found at http://www.php.net/FAQ.php
Bug reports
If you think you have found a bug in PHP, please report it. The PHP developers probably don’t know about it, and unless you report it, chances are it won’t be fixed. You can report bugs using the bug-tracking system at http://www.php.net/bugs.php.
Other problems
If you are still stuck, someone on the PHP mailing list may be able to help you. You should check out the archive first, in case someone already answered someone else who had the same problem as you. The archives are available from the support page on http://www.php.net/. To subscribe to the PHP mailing list, send an empty mail to php3-subscribe@lists.php.net (mailto:php3-subscribe@lists.php.net). The mailing list address is php3@lists.php.net. If you want to get help on the mailing list, please try to be precise and give the necessary details about your environment (which operating system, what PHP version, what web server, if you are running PHP as CGI or a server module, etc.), and preferably enough code to make others able to reproduce and test your problem.
66
Chapter 3. Configuration
The configuration file
The configuration file (called php3.ini in PHP 3.0, and simply php.ini as of PHP 4.0) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI version, it happens on every invocation. When using PHP as an Apache module, you can also change the configuration settings using directives in Apache configuration files and .htaccess files. With PHP 3.0, there are Apache directives that correspond to each configuration setting in the php3.ini name, except the name is prefixed by "php3_". With PHP 4.0, there are just a few Apache directives that allow you to change the PHP configuration settings. php_value name value This sets the value of the specified variable. php_flag name on|off This is used to set a Boolean configuration option. php_admin_value name value This sets the value of the specified variable. "Admin" configuration settings can only be set from within the main Apache configuration files, and not from .htaccess files. php_admin_flag name on|off This is used to set a Boolean configuration option. You can view the settings of the configuration values in the output of phpinfo(). You can also access the values of individial configuration settings using get_cfg_var().
General Configuration Directives
asp_tags boolean Enables the use of ASP-like <% %> tags in addition to the usual tags. This includes the variable-value printing shorthand of <%= $value %>. For more information, see Escaping from HTML.
Note: Support for ASP-style tags was added in 3.0.4.
67
Chapter 3. Configuration
auto_append_file string Specifies the name of a file that is automatically parsed after the main file. The file is included as if it was called with the include() function, so include_path is used. The special value none disables auto-appending.
Note: If the script is terminated with exit(), auto-append will not occur.
auto_prepend_file string Specifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the include() function, so include_path is used. The special value none disables auto-prepending. cgi_ext string
display_errors boolean This determines whether errors should be printed to the screen as part of the HTML output or not. doc_root string PHP’s "root directory" on the server. Only used if non-empty. If PHP is configured with safe mode, no files outside this directory are served. engine boolean This directive is really only useful in the Apache module version of PHP. It is used by sites that would like to turn PHP parsing on and off on a per-directory or per-virtual server basis. By putting php3_engine off in the appropriate places in the httpd.conf file, PHP can be enabled or disabled. error_log string Name of file where script errors should be logged. If the special value syslog is used, the errors are sent to the system logger instead. On UNIX, this means syslog(3) and on Windows NT it means the event log. The system logger is not supported on Windows 95. error_reporting integer Set the error reporting level. The parameter is an integer representing a bit field. Add the values of the error reporting levels you want. Table 3-1. Error Reporting Levels
68
Chapter 3. Configuration
bit value 1 2 4 8
enabled reporting normal errors normal warnings parser errors non-critical style-related warnings
The default value for this directive is 7 (normal errors, normal warnings and parser errors are shown). open_basedir string Limit the files that can be opened by PHP to the specified directory-tree. When a script tries to open a file with, for example, fopen or gzopen, the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it’s not possible to avoid this restriction with a symlink. The special value . indicates that the directory in which the script is stored will be used as base-directory. Under Windows, separate the directories with a semicolon. On all other systems, separate the directories with a colon. As an Apache module, open_basedir paths from parent directories are now automatically inherited.
Note: Support for multiple directories was added in 3.0.7.
The default is to allow all files to be opened. gpc_order string Set the order of GET/POST/COOKIE variable parsing. The default setting of this directive is "GPC". Setting this to "GP", for example, will cause PHP to completely ignore cookies and to overwrite any GET method variables with POST-method variables of the same name. ignore_user_abort string On by default. If changed to Off scripts will be terminated as soon as they try to output something after a client has aborted their connection. ignore_user_abort(). include_path string Specifies a list of directories where the require(), include() and fopen_with_path() functions look for files. The format is like the system’s PATH environment variable: a list of directories separated with a colon in UNIX or semicolon in Windows. Example 3-1. UNIX include_path
1 2 include_path=.:/home/httpd/php-lib 3
69
Chapter 3. Configuration
Example 3-2. Windows include_path
1 2 include_path=".;c:\www\phplib" 3
The default value for this directive is . (only the current directory). isapi_ext string
log_errors boolean Tells whether script error messages should be logged to the server’s error log. This option is thus server-specific. magic_quotes_gpc boolean Sets the magic_quotes state for GPC (Get/Post/Cookie) operations. When magic_quotes are on, all ’ (single-quote), " (double quote), \ (backslash) and NUL’s are escaped with a backslash automatically. If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash. magic_quotes_runtime boolean If magic_quotes_runtime is enabled, most functions that return data from any sort of external source including databases and text files will have quotes escaped with a backslash. If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash. magic_quotes_sybase boolean If magic_quotes_sybase is also on, a single-quote is escaped with a single-quote instead of a backslash if magic_quotes_gpc or magic_quotes_runtime is enabled. max_execution_time integer This sets the maximum time in seconds a script is allowed to take before it is terminated by the parser. This helps prevent poorly written scripts from tieing up the server. memory_limit integer This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server. nsapi_ext string
70
Chapter 3. Configuration
short_open_tag boolean Tells whether the short form ( ?>of PHP’s open tag should be allowed. If you want to use PHP in combination with XML, you have to disable this option. If disabled, you must use the long form of the open tag (). sql.safe_mode boolean
track_errors boolean If enabled, the last error message will always be present in the global variable $php_errormsg. track_vars boolean If enabled, GET, POST and cookie input can be found in the global associative arrays $HTTP_GET_VARS, $HTTP_POST_VARS and $HTTP_COOKIE_VARS, respectively. upload_tmp_dir string The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. user_dir string The base name of the directory used on a user’s home directory for PHP files, for example public_html. warn_plus_overloading boolean If enabled, this option makes PHP output a warning when the plus (+) operator is used on strings. This is to make it easier to find scripts that need to be rewritten to using the string concatenator instead (.).
Mail Configuration Directives
SMTP string DNS name or IP address of the SMTP server PHP under Windows should use for mail sent with the mail() function. sendmail_from string Which "From:" mail address should be used in mail sent from PHP under Windows. sendmail_path string Where the sendmail program can be found, usually /usr/sbin/sendmail or /usr/lib/sendmail configure does an honest attempt of locating this one for you and set a
71
Chapter 3. Configuration
default, but if it fails, you can set it here. Systems not using sendmail should set this directive to the sendmail wrapper/replacement their mail system offers, if any. For example, Qmail (http://www.qmail.org/) users can normally set it to /var/qmail/bin/sendmail.
Safe Mode Configuration Directives
safe_mode boolean Whether to enable PHP’s safe mode. Read the Security chapter for more more information. safe_mode_exec_dir string If PHP is used in safe mode, system() and the other functions executing system programs refuse to start programs that are not in this directory.
Debugger Configuration Directives
debugger.host string DNS name or IP address of host used by the debugger. debugger.port string Port number used by the debugger. debugger.enabled boolean Whether the debugger is enabled.
Extension Loading Directives
enable_dl boolean This directive is really only useful in the Apache module version of PHP. You can turn dynamic loading of PHP extensions with dl() on and off per virtual server or per directory. The main reason for turning dynamic loading off is security. With dynamic loading, it’s possible to ignore all the safe_mode and open_basedir restrictions. The default is to allow dynamic loading, except when using safe-mode. In safe-mode, it’s always imposible to use dl().
72
Chapter 3. Configuration
extension_dir string In what directory PHP should look for dynamically loadable extensions. extension string Which dynamically loadable extensions to load when PHP starts up.
MySQL Configuration Directives
mysql.allow_persistent boolean Whether to allow persistent MySQL connections. mysql.default_host string The default server host to use when connecting to the database server if no other host is specified. mysql.default_user string The default user name to use when connecting to the database server if no other name is specified. mysql.default_password string The default password to use when connecting to the database server if no other password is specified. mysql.max_persistent integer The maximum number of persistent MySQL connections per process. mysql.max_links integer The maximum number of MySQL connections per process, including persistent connections.
mSQL Configuration Directives
msql.allow_persistent boolean Whether to allow persistent mSQL connections. msql.max_persistent integer The maximum number of persistent mSQL connections per process.
73
Chapter 3. Configuration
msql.max_links integer The maximum number of mSQL connections per process, including persistent connections.
Postgres Configuration Directives
pgsql.allow_persistent boolean Whether to allow persistent Postgres connections. pgsql.max_persistent integer The maximum number of persistent Postgres connections per process. pgsql.max_links integer The maximum number of Postgres connections per process, including persistent connections.
Sybase Configuration Directives
sybase.allow_persistent boolean Whether to allow persistent Sybase connections. sybase.max_persistent integer The maximum number of persistent Sybase connections per process. sybase.max_links integer The maximum number of Sybase connections per process, including persistent connections.
Sybase-CT Configuration Directives
sybct.allow_persistent boolean Whether to allow persistent Sybase-CT connections. The default is on. sybct.max_persistent integer The maximum number of persistent Sybase-CT connections per process. The default is -1 meaning unlimited.
74
Chapter 3. Configuration
sybct.max_links integer The maximum number of Sybase-CT connections per process, including persistent connections. The default is -1 meaning unlimited. sybct.min_server_severity integer Server messages with severity greater than or equal to sybct.min_server_severity will be reported as warnings. This value can also be set from a script by calling sybase_min_server_severity(). The default is 10 which reports errors of information severity or greater. sybct.min_client_severity integer Client library messages with severity greater than or equal to sybct.min_client_severity will be reported as warnings. This value can also be set from a script by calling sybase_min_client_severity(). The default is 10 which effectively disables reporting. sybct.login_timeout integer The maximum time in seconds to wait for a connection attempt to succeed before returning failure. Note that if max_execution_time has been exceeded when a connection attempt times out, your script will be terminated before it can take action on failure. The default is one minute. sybct.timeout integer The maximum time in seconds to wait for a select_db or query operation to succeed before returning failure. Note that if max_execution_time has been exceeded when am operation times out, your script will be terminated before it can take action on failure. The default is no limit. sybct.hostname string The name of the host you claim to be connecting from, for display by sp_who. The default is none.
Informix Configuration Directives
ifx.allow_persistent boolean Whether to allow persistent Informix connections. ifx.max_persistent integer The maximum number of persistent Informix connections per process. ifx.max_links integer The maximum number of Informix connections per process, including persistent connections.
75
Chapter 3. Configuration
ifx.default_host string The default host to connect to when no host is specified in ifx_connect() or ifx_pconnect(). ifx.default_user string The default user id to use when none is specified in ifx_connect() or ifx_pconnect(). ifx.default_password string The default password to use when none is specified in ifx_connect() or ifx_pconnect(). ifx.blobinfile boolean Set to true if you want to return blob columns in a file, false if you want them in memory. You can override the setting at runtime with ifx_blobinfile_mode(). ifx.textasvarchar boolean Set to true if you want to return TEXT columns as normal strings in select statements, false if you want to use blob id parameters. You can override the setting at runtime with ifx_textasvarchar(). ifx.byteasvarchar boolean Set to true if you want to return BYTE columns as normal strings in select queries, false if you want to use blob id parameters. You can override the setting at runtime with ifx_textasvarchar(). ifx.charasvarchar boolean Set to true if you want to trim trailing spaces from CHAR columns when fetching them. ifx.nullformat boolean Set to true if you want to return NULL columns as the literal string "NULL", false if you want them returned as the empty string "". You can override this setting at runtime with ifx_nullformat().
BC Math Configuration Directives
bcmath.scale integer Number of decimal digits for all bcmath functions.
76
Chapter 3. Configuration
Browser Capability Configuration Directives
browscap string Name of browser capabilities file. See also get_browser().
Unified ODBC Configuration Directives
uodbc.default_db string ODBC data source to use if none is specified in odbc_connect() or odbc_pconnect(). uodbc.default_user string User name to use if none is specified in odbc_connect() or odbc_pconnect(). uodbc.default_pw string Password to use if none is specified in odbc_connect() or odbc_pconnect(). uodbc.allow_persistent boolean Whether to allow persistent ODBC connections. uodbc.max_persistent integer The maximum number of persistent ODBC connections per process. uodbc.max_links integer The maximum number of ODBC connections per process, including persistent connections.
77
Chapter 4. Security
PHP is a powerful language and the interpreter, whether included in a web server as a module or executed as a separate CGI binary, is able to access files, execute commands and open network connections on the server. These properties make anything run on a web server insecure by default. PHP is designed specifically to be a more secure language for writing CGI programs than Perl or C, and with correct selection of compile-time and runtime configuration options it gives you exactly the combination of freedom and security you need. As there are many different ways of utilizing PHP, there are many configuration options controlling its behaviour. A large selection of options guarantees you can use PHP for a lot of purposes, but it also means there are combinations of these options and server configurations that result in an insecure setup. This chapter explains the different configuration option combinations and the situations they can be safely used.
CGI binary
Possible attacks
Using PHP as a CGI binary is an option for setups that for some reason do not wish to integrate PHP as a module into server software (like Apache), or will use PHP with different kinds of CGI wrappers to create safe chroot and setuid environments for scripts. This setup usually involves installing executable PHP binary to the web server cgi-bin directory. CERT advisory CA-96.11 (http://www.cert.org/advisories/CA-96.11.interpreters_in_cgi_bin_dir.html) recommends against placing any interpreters into cgi-bin. Even if the PHP binary can be used as a standalone interpreter, PHP is designed to prevent the attacks this setup makes possible:
•
Accessing system files: http://my.host/cgi-bin/php?/etc/passwd The query information in a url after the question mark (?) is passed as command line arguments to the interpreter by the CGI interface. Usually interpreters open and execute the file specified as the first argument on the command line. When invoked as a CGI binary, PHP refuses to interpret the command line arguments.
•
Accessing any web document on server: http://my.host/cgi-bin/php/secret/doc.html The path information part of the url after the PHP binary name, /secret/doc.html is conventionally used to specify the name of the file to be opened and interpreted by the CGI program. Usually some web server configuration directives (Apache: Action) are used to redirect requests to documents like http://my.host/secret/script.php3 to the PHP interpreter. With this setup, the web server first checks the access permissions to the directory /secret, and after that creates the redirected request http://my.host/cgi-bin/php/secret/script.php3. Unfortunately, if the request is
78
Chapter 4. Security
originally given in this form, no access checks are made by web server for file /secret/script.php3, but only for the /cgi-bin/php file. This way any user able to access /cgi-bin/php is able to access any protected document on the web server. In PHP, compile-time configuration option --enable-force-cgi-redirect and runtime configuration directives doc_root and user_dir can be used to prevent this attack, if the server document tree has any directories with access restrictions. See below for full the explanation of the different combinations.
Case 1: only public files served
If your server does not have any content that is not restricted by password or ip based access control, there is no need for these configuration options. If your web server does not allow you to do redirects, or the server does not have a way to communicate to the PHP binary that the request is a safely redirected request, you can specify the option --disable-force-cgi-redirect to the configure script. You still have to make sure your PHP scripts do not rely on one or another way of calling the script, neither by directly http://my.host/cgi-bin/php/dir/script.php3 nor by redirection http://my.host/dir/script.php3. Redirection can be configured in Apache by using AddHandler and Action directives (see below).
Case 2: using --enable-force-cgi-redirect
This compile-time option prevents anyone from calling PHP directly with a url like http://my.host/cgi-bin/php/secretdir/script.php3. Instead, PHP will only parse in this mode if it has gone through a web server redirect rule. Usually the redirection in the Apache configuration is done with the following directives:
1 2 Action php3-script /cgi-bin/php 3 AddHandler php3-script .php3 4
This option has only been tested with the Apache web server, and relies on Apache to set the non-standard CGI environment variable REDIRECT_STATUS on redirected requests. If your web server does not support any way of telling if the request is direct or redirected, you cannot use this option and you must use one of the other ways of running the CGI version documented here.
Case 3: setting doc_root or user_dir
To include active content, like scripts and executables, in the web server document directories is sometimes consider an insecure practice. If, because of some configuration mistake, the scripts are not executed but displayed as regular HTML documents, this may result in leakage of intellectual
79
Chapter 4. Security
property or security information like passwords. Therefore many sysadmins will prefer setting up another directory structure for scripts that are accessible only through the PHP CGI, and therefore always interpreted and not displayed as such. Also if the method for making sure the requests are not redirected, as described in the previous section, is not available, it is necessary to set up a script doc_root that is different from web document root. You can set the PHP script document root by the configuration directive doc_root in the configuration file, or you can set the environment variable PHP_DOCUMENT_ROOT. If it is set, the CGI version of PHP will always construct the file name to open with this doc_root and the path information in the request, so you can be sure no script is executed outside this directory (except for user_dir below). Another option usable here is user_dir. When user_dir is unset, only thing controlling the opened file name is doc_root. Opening an url like http://my.host/~user/doc.php3 does not result in opening a file under users home directory, but a file called ~user/doc.php3 under doc_root (yes, a directory name starting with a tilde [~]). If user_dir is set to for example public_php, a request like http://my.host/~user/doc.php3 will open a file called doc.php3 under the directory named public_php under the home directory of the user. If the home of the user is /home/user, the file executed is /home/user/public_php/doc.php3. user_dir expansion happens regardless of the doc_root setting, so you can control the document root and user directory access separately.
Case 4: PHP parser outside of web tree
A very secure option is to put the PHP parser binary somewhere outside of the web tree of files. In /usr/local/bin, for example. The only real downside to this option is that you will now have to put a line similar to:
1 2 #!/usr/local/bin/php 3
as the first line of any file containing PHP tags. You will also need to make the file executable. That is, treat it exactly as you would treat any other CGI script written in Perl or sh or any other common scripting language which uses the #! shell-escape mechanism for launching itself. To get PHP to handle PATH_INFO and PATH_TRANSLATED information correctly with this setup, the php parser should be compiled with the --enable-discard-path configure option.
80
Chapter 4. Security
Apache module
When PHP is used as an Apache module it inherits Apache’s user permissions (typically those of the "nobody" user).
81
II. Language Reference
82
Chapter 5. Basic syntax
Escaping from HTML
There are four ways of escaping from HTML and entering "PHP code mode": Example 5-1. Ways of escaping from HTML
1 2 1. 3 4 2.
echo ("this is the simplest, an SGML processing instruction\n"); ?>
5 6 3. 7 8 9 10 11 4. 12 13
<% echo ("You may optionally use ASP-style tags"); %> <%= $variable; # This is a shortcut for "<%echo .." %>
The first way is only available if short tags have been enabled. This can be done via the short_tags() function, by enabling the short_open_tag configuration setting in the PHP config file, or by compiling PHP with the --enable-short-tags option to configure. The fourth way is only available if ASP-style tags have been enabled using the asp_tags configuration setting.
Note: Support for ASP-style tags was added in 3.0.4.
The closing tag for the block will include the immediately trailing newline if one is present.
Instruction separation
Instructions are separated the same as in C or perl - terminate each statement with a semicolon. The closing tag (?>) also implies the end of the statement, so the following are equivalent:
1
83
Chapter 5. Basic syntax
2 5 6 7
Comments
PHP supports ’C’, ’C++’ and Unix shell-style comments. For example:
1 2 9
The "one-line" comment styles actually only comment to the end of the line or the current block of PHP code, whichever comes first.
1 2
This is an # echo "simple";?> example.
3
The header above will say ’This is an example’. 4
You should be careful not to nest ’C’ style comments, which can happen when commenting out large blocks.
1 2 7
84
Chapter 6. Types
PHP supports the following types:
• • • • •
array floating-point numbers integer object string
The type of a variable is usually not set by the programmer; rather, it is decided at runtime by PHP depending on the context in which that variable is used. If you would like to force a variable to be converted to a certain type, you may either cast the variable or use the settype() function on it. Note that a variable may behave in different manners in certain situations, depending on what type it is at the time. For more information, see the section on Type Juggling.
Integers
Integers can be specified using any of the following syntaxes:
1 2 3 4 5 6
$a $a $a $a
= = = =
1234; -123; 0123; 0x12;
# # # #
decimal number a negative number octal number (equivalent to 83 decimal) hexadecimal number (equivalent to 18 decimal)
Floating point numbers
Floating point numbers ("doubles") can be specified using any of the following syntaxes:
1 2 $a = 1.234; $a = 1.2e3; 3
85
Chapter 6. Types
Strings
Strings can be specified using one of two sets of delimiters. If the string is enclosed in double-quotes ("), variables within the string will be expanded (subject to some parsing limitations). As in C and Perl, the backslash ("\") character can be used in specifying special characters: Table 6-1. Escaped characters sequence
\n \r \t \\ \$ \" \[0-7]{1,3} \x[0-9A-Fa-f]{1,2}
meaning newline carriage horizontal tab backslash dollar sign double-quote the sequence of characters matching the regular expression is a character in octal notation the sequence of characters matching the regular expression is a character in hexadecimal notation
You can escape any other character, but a warning will be issued at the highest warning level. The second way to delimit a string uses the single-quote ("’") character. When a string is enclosed in single quotes, the only escapes that will be understood are "\\" and "\’". This is for convenience, so that you can have single-quotes and backslashes in a single-quoted string. Variables will not be expanded inside a single-quoted string. Another way to delimit strings is by using here doc syntax ("<<<"). One should provide an identifier after <<<, then the string, and then the same identifier to close the quotation. The closing identifier must begin in the first column of the line. Example 6-1. Here doc string quoting example
1 2 3 4 5 6 7
$str = <<Number: 9
’ */ $num = 9; $str = "
Number: $num
"; /* This one will be ’
Number: $num
’ */ $num = 9; $str = ’
Number: $num
’; /* Get the first character of a string $str = ’This is a test.’; $first = $str[0]; */
/* Get the last character of a string. */ $str = ’This is still a test.’; $last = $str[strlen($str)-1]; ?>
String conversion
When a string is evaluated as a numeric value, the resulting value and type are determined as follows. The string will evaluate as a double if it contains any of the characters ’.’, ’e’, or ’E’. Otherwise, it will evaluate as an integer. The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign,
87
Chapter 6. Types
followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an ’e’ or ’E’ followed by one or more digits. When the first expression is a string, the type of the variable will depend on the second expression.
1 2 3 4 5 6 7 8 9 10
$foo $foo $foo $foo $foo $foo $foo $foo
= = = = = = = =
1 + "10.5"; 1 + "-1.3e3"; 1 + "bob-1.3e3"; 1 + "bob3"; 1 + "10 Small Pigs"; 1 + "10 Little Piggies"; "10.0 pigs " + 1; "10.0 pigs " + 1.0;
// // // // // // // //
$foo $foo $foo $foo $foo $foo $foo $foo
is is is is is is is is
double (11.5) double (-1299) integer (1) integer (1) integer (11) integer (11) integer (11) double (11)
For more information on this conversion, see the Unix manual page for strtod(3). If you would like to test any of the examples in this section, you can cut and paste the examples and insert the following line to see for yourself what’s going on:
1 2 echo "\$foo==$foo; type is " . gettype ($foo) . "
\n"; 3
Arrays
Arrays actually act like both hash tables (associative arrays) and indexed arrays (vectors).
Single Dimension Arrays
PHP supports both scalar and associative arrays. In fact, there is no difference between the two. You can create an array using the list() or array() functions, or you can explicitly set each array element value.
1 2 $a[0] = "abc"; 3 $a[1] = "def"; 4 $b["foo"] = 13; 5
You can also create an array by simply adding values to the array. When you assign a value to an array variable using empty brackets, the value will be added onto the end of the array.
88
Chapter 6. Types
1 2 $a[] = "hello"; // $a[2] == "hello" 3 $a[] = "world"; // $a[3] == "world" 4
Arrays may be sorted using the asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), and uksort() functions depending on the type of sort you want. You can count the number of items in an array using the count() function. You can traverse an array using next() and prev() functions. Another common way to traverse an array is to use the each() function.
Multi-Dimensional Arrays
Multi-dimensional arrays are actually pretty simple. For each dimension of the array, you add another [key] value to the end:
1 2 3 4 5 6
$a[1] $a["foo"]
= $f; = $f;
# one dimensional examples
$a[1][0] = $f; $a["foo"][2] = $f; tive indices) 7 $a[3]["bar"] = $f; tive indices)
8 9 $a["foo"][4]["bar"][0] = $f; 10
# two dimensional # (you can mix numeric and associa# (you can mix numeric and associa-
# four dimensional!
In PHP3 it is not possible to reference multidimensional arrays directly within strings. For instance, the following will not have the desired result:
1 2 $a[3][’bar’] = ’Bob’; 3 echo "This won’t work: $a[3][bar]"; 4
In PHP3, the above will output This won’t work: Array[bar]. The string concatenation operator, however, can be used to overcome this:
1 2 $a[3][’bar’] = ’Bob’; 3 echo "This will work: " . $a[3][bar]; 4
89
Chapter 6. Types
In PHP4, however, the whole problem may be circumvented by enclosing the array reference (inside the string) in curly braces:
1 2 $a[3][’bar’] = ’Bob’; 3 echo "This will work: {$a[3][bar]}"; 4
You can "fill up" multi-dimensional arrays in many ways, but the trickiest one to understand is how to use the array() command for associative arrays. These two snippets of code fill up the one-dimensional array in the same way:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# Example 1: $a["color"] = "red"; $a["taste"] = "sweet"; $a["shape"] = "round"; $a["name"] = "apple"; $a[3] = 4; # Example 2: $a = array( "color" "taste" "shape" "name" 3 );
=> => => => =>
"red", "sweet", "round", "apple", 4
The array() function can be nested for multi-dimensional arrays:
1 2 3 $a = array( 4 "apple" => array( 5 "color" => "red", 6 "taste" => "sweet", 7 "shape" => "round" 8 ), 9 "orange" => array( 10 "color" => "orange", 11 "taste" => "tart", 12 "shape" => "round" 13 ), 14 "banana" => array(
90
Chapter 6. Types
15 "color" => "yellow", 16 "taste" => "paste-y", 17 "shape" => "banana-shaped" 18 ) 19 ); 20 21 echo $a["apple"]["taste"]; # will output "sweet" 22 ?> 23
Objects
Object Initialization
To initialize an object, you use the new statement to instantiate the object to a variable.
1 2 3 4 5 6 7 8 9 10 11 12
do_foo(); ?>
For a full discussion, please read the section Classes and Objects.
Type Juggling
PHP does not require (or support) explicit type definition in variable declaration; a variable’s type is determined by the context in which that variable is used. That is to say, if you assign a string value to variable var, var becomes a string. If you then assign an integer value to var, it becomes an integer. An example of PHP’s automatic type conversion is the addition operator ’+’. If any of the operands is a double, then all operands are evaluated as doubles, and the result will be a double. Otherwise, the
91
Chapter 6. Types
operands will be interpreted as integers, and the result will also be an integer. Note that this does NOT change the types of the operands themselves; the only change is in how the operands are evaluated.
1 2 3 4 5 6 7 8
$foo = "0"; // $foo is string (ASCII 48) $foo++; // $foo is the string "1" (ASCII 49) $foo += 1; // $foo is now an integer (2) $foo = $foo + 1.3; // $foo is now a double (3.3) $foo = 5 + "10 Little Piggies"; // $foo is integer (15) $foo = 5 + "10 Small Pigs"; // $foo is integer (15)
If the last two examples above seem odd, see String conversion. If you wish to force a variable to be evaluated as a certain type, see the section on Type casting. If you wish to change the type of a variable, see settype(). If you would like to test any of the examples in this section, you can cut and paste the examples and insert the following line to see for yourself what’s going on:
1 2 echo "\$foo==$foo; type is " . gettype ($foo) . "
\n"; 3
Note: The behaviour of an automatic conversion to array is currently undefined.
1 2 $a = 1; 3 $a[0] = "f"; 4
// $a is an integer // $a becomes an array, with $a[0] holding "f"
While the above example may seem like it should clearly result in $a becoming an array, the first element of which is ’f’, consider this:
1 2 $a = "1"; 3 $a[0] = "f"; 4
// $a is a string // What about string offsets? What happens?
Since PHP supports indexing into strings via offsets using the same syntax as array indexing, the example above leads to a problem: should $a become an array with its first element being "f", or should "f" become the first character of the string $a? For this reason, as of PHP 3.0.12 and PHP 4.0b3-RC4, the result of this automatic conversion is considered to be undefined. Fixes are, however, being discussed.
92
Chapter 6. Types
Type Casting
Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.
1 2 $foo = 10; // $foo is an integer 3 $bar = (double) $foo; // $bar is a double 4
The casts allowed are:
• • • • •
(int), (integer) - cast to integer (real), (double), (float) - cast to double (string) - cast to string (array) - cast to array (object) - cast to object
Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:
1 2 $foo = (int) $bar; 3 $foo = ( int ) $bar; 4
It may not be obvious exactly what will happen when casting between certain types. For instance, the following should be noted. When casting from a scalar or a string variable to an array, the variable will become the first element of the array:
1 2 $var = ’ciao’; 3 $arr = (array) $var; 4 echo $arr[0]; // outputs ’ciao’ 5
When casting from a scalar or a string variable to an object, the variable will become an attribute of the object; the attribute name will be ’scalar’:
1 2 $var = ’ciao’; 3 $obj = (object) $var;
93
Chapter 6. Types
4 echo $obj->scalar; 5
// outputs ’ciao’
94
Chapter 7. Variables
Basics
Variables in PHP are represented by a dollar sign followed by the name of the variable. The variable name is case-sensitive. Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: ’[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*’
Note: For our purposes here, a letter is a-z, A-Z, and the ASCII characters from 127 through 255 (0x7f-0xff).
1 2 3 4 5 6 7 8 9
$var = "Bob"; $Var = "Joe"; echo "$var, $Var"; $4site = ’not yet’; $_4site = ’not yet’; $täyte = ’mansikka’;
// outputs "Bob, Joe" // invalid; starts with a number // valid; starts with an underscore // valid; ’ä’ is ASCII 228.
In PHP3, variables are always assigned by value. That is to say, when you assign an expression to a variable, the entire value of the original expression is copied into the destination variable. This means, for instance, that after assigning one variable’s value to another, changing one of those variables will have no effect on the other. For more information on this kind of assignment, see Expressions. PHP4 offers another way to assign values to variables: assign by reference. This means that the new variable simply references (in other words, "becomes an alias for" or "points to") the original variable. Changes to the new variable affect the original, and vice versa. This also means that no copying is performed; thus, the assignment happens more quickly. However, any speedup will likely be noticed only in tight loops or when assigning large arrays or objects. To assign by reference, simply prepend an ampersand (&) to the beginning of the variable which is being assigned (the source variable). For instance, the following code snippet outputs ’My name is Bob’ twice:
1 2
= &$foo; = "My name is $bar"; $foo; $bar;
// Reference $foo via $bar. // Alter $bar... // $foo is altered too.
One important thing to note is that only named variables may be assigned by reference.
1 2 3 4 5 6 7 8 9 10 11 12 13
// This is a valid assignment. // Invalid; references an unnamed expression.
// Invalid.
Predefined variables
PHP provides a large number of predefined variables to any script which it runs. Many of these variables, however, cannot be fully documented as they are dependent upon which server is running, the version and setup of the server, and other factors. Some of these variables will not be available when PHP is run on the command-line. Despite these factors, here is a list of predefined variables available under a stock installation of PHP 3 running as a module under a stock installation of Apache (http://www.apache.org/) 1.3.6. For a list of all predefined variables (and lots of other useful information), please see (and use) phpinfo().
Note: This list is neither exhaustive nor intended to be. It is simply a guideline as to what sorts of predefined variables you can expect to have access to in your script.
Apache variables
These variables are created by the Apache (http://www.apache.org/) webserver. If you are running another webserver, there is no guarantee that it will provide the same variables; it may omit some, or provide others not listed here. That said, a large number of these variables are accounted for in the
96
Chapter 7. Variables
CGI 1.1 specification (http://hoohoo.ncsa.uiuc.edu/cgi/env.html), so you should be able to expect those. Note that few, if any, of these will be available (or indeed have any meaning) if running PHP on the command line. GATEWAY_INTERFACE What revision of the CGI specification the server is using; i.e. ’CGI/1.1’. SERVER_NAME The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host. SERVER_SOFTWARE Server identification string, given in the headers when responding to requests. SERVER_PROTOCOL Name and revision of the information protocol via which the page was requested; i.e. ’HTTP/1.0’; REQUEST_METHOD Which request method was used to access the page; i.e. ’GET’, ’HEAD’, ’POST’, ’PUT’. QUERY_STRING The query string, if any, via which the page was accessed. DOCUMENT_ROOT The document root directory under which the current script is executing, as defined in the server’s configuration file. HTTP_ACCEPT Contents of the Accept: header from the current request, if there is one. HTTP_ACCEPT_CHARSET Contents of the Accept-Charset: header from the current request, if there is one. Example: ’iso-8859-1,*,utf-8’. HTTP_ENCODING Contents of the Accept-Encoding: header from the current request, if there is one. Example: ’gzip’.
97
Chapter 7. Variables
HTTP_ACCEPT_LANGUAGE Contents of the Accept-Language: header from the current request, if there is one. Example: ’en’. HTTP_CONNECTION Contents of the Connection: header from the current request, if there is one. Example: ’Keep-Alive’. HTTP_HOST Contents of the Host: header from the current request, if there is one. HTTP_REFERER The address of the page (if any) which referred the browser to the current page. This is set by the user’s browser; not all browsers will set this. HTTP_USER_AGENT Contents of the User_Agent: header from the current request, if there is one. This is a string denoting the browser software being used to view the current page; i.e. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Among other things, you can use this value with get_browser() to tailor your page’s functionality to the capabilities of the user’s browser. REMOTE_ADDR The IP address from which the user is viewing the current page. REMOTE_PORT The port being used on the user’s machine to communicate with the web server. SCRIPT_FILENAME The absolute pathname of the currently executing script. SERVER_ADMIN The value given to the SERVER_ADMIN (for Apache) directive in the web server configuration file. If the script is running on a virtual host, this will be the value defined for that virtual host. SERVER_PORT The port on the server machine being used by the web server for communication. For default setups, this will be ’80’; using SSL, for instance, will change this to whatever your defined secure HTTP port is.
98
Chapter 7. Variables
SERVER_SIGNATURE String containing the server version and virtual host name which are added to server-generated pages, if enabled. PATH_TRANSLATED Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping. SCRIPT_NAME Contains the current script’s path. This is useful for pages which need to point to themselves. REQUEST_URI The URI which was given in order to access this page; for instance, ’/index.html’.
Environment variables
These variables are imported into PHP’s global namespace from the environment under which the PHP parser is running. Many are provided by the shell under which PHP is running and different systems are likely running different kinds of shells, a definitive list is impossible. Please see your shell’s documentation for a list of defined environment variables. Other environment variables include the CGI variables, placed there regardless of whether PHP is running as a server module or CGI processor.
PHP variables
These variables are created by PHP itself. argv Array of arguments passed to the script. When the script is run on the command line, this gives C-style access to the command line parameters. When called via the GET method, this will contain the query string. argc Contains the number of command line parameters passed to the script (if run on the command line). PHP_SELF The filename of the currently executing script, relative to the document root. If PHP is running as a command-line processor, this variable is not available.
99
Chapter 7. Variables
HTTP_COOKIE_VARS An associative array of variables passed to the current script via HTTP cookies. Only available if variable tracking has been turned on via either the track_vars configuration directive or the directive. HTTP_GET_VARS An associative array of variables passed to the current script via the HTTP GET method. Only available if variable tracking has been turned on via either the track_vars configuration directive or the directive. HTTP_POST_VARS An associative array of variables passed to the current script via the HTTP POST method. Only available if variable tracking has been turned on via either the track_vars configuration directive or the directive.
Variable scope
The scope of a variable is the context within which it is defined. For the most part all PHP variables only have a single scope. This single scope spans included and required files as well. For example:
1 2 $a = 1; 3 include "b.inc"; 4
Here the $a variable will be available within the included b.inc script. However, within user-defined functions a local function scope is introduced. Any variable used inside a function is by default limited to the local function scope. For example:
1 2 3 4 5 6 7 8 9
$a = 1; /* global scope */ Function Test () { echo $a; /* reference to local scope variable */ } Test ();
This script will not produce any output because the echo statement refers to a local version of the $a variable, and it has not been assigned a value within this scope. You may notice that this is a little bit different from the C language in that global variables in C are automatically available to functions
100
Chapter 7. Variables
unless specifically overridden by a local definition. This can cause some problems in that people may inadvertently change a global variable. In PHP global variables must be declared global inside a function if they are going to be used in that function. An example:
1 2 3 4 5 6 7 8 9 10 11 12 13
$a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;
The above script will output "3". By declaring $a and $b global within the function, all references to either variable will refer to the global version. There is no limit to the number of global variables that can be manipulated by a function. A second way to access variables from the global scope is to use the special PHP-defined $GLOBALS array. The previous example can be rewritten as:
1 2 3 4 5 6 7 8 9 10 11
$a = 1; $b = 2; Function Sum () { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b;
The $GLOBALS array is an associative array with the name of the global variable being the key and the contents of that variable being the value of the array element. Another important feature of variable scoping is the static variable. A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope. Consider the following example:
1 2 Function Test () { 3 $a = 0; 4 echo $a;
101
Chapter 7. Variables
5 6 } 7
$a++;
This function is quite useless since every time it is called it sets $a to 0 and prints "0". The $a++ which increments the variable serves no purpose since as soon as the function exits the $a variable disappears. To make a useful counting function which will not lose track of the current count, the $a variable is declared static:
1 2 Function Test () { 3 static $a = 0; 4 echo $a; 5 $a++; 6 } 7
Now, every time the Test() function is called it will print the value of $a and increment it. Static variables also provide one way to deal with recursive functions. A recursive function is one which calls itself. Care must be taken when writing a recursive function because it is possible to make it recurse indefinitely. You must make sure you have an adequate way of terminating the recursion. The following simple function recursively counts to 10, using the static variable $count to know when to stop:
1 2 Function Test () { 3 static $count = 0; 4 5 $count++; 6 echo $count; 7 if ($count < 10) { 8 Test (); 9 } 10 $count--; 11 } 12
Variable variables
Sometimes it is convenient to be able to have variable variable names. That is, a variable name which can be set and used dynamically. A normal variable is set with a statement such as:
1 2 $a = "hello";
102
Chapter 7. Variables
3
A variable variable takes the value of a variable and treats that as the name of a variable. In the above example, hello, can be used as the name of a variable by using two dollar signs. i.e.
1 2 $$a = "world"; 3
At this point two variables have been defined and stored in the PHP symbol tree: $a with contents "hello" and $hello with contents "world". Therefore, this statement:
1 2 echo "$a ${$a}"; 3
produces the exact same output as:
1 2 echo "$a $hello"; 3
i.e. they both produce: hello world. In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.
Variables from outside PHP
HTML Forms (GET and POST)
When a form is submitted to a PHP script, any variables from that form will be automatically made available to the script by PHP. For instance, consider the following form: Example 7-1. Simple form variable
1 2
6
103
Chapter 7. Variables
When submitted, PHP will create the variable $name, which will will contain whatever what entered into the Name: field on the form. PHP also understands arrays in the context of form variables, but only in one dimension. You may, for example, group related variables together, or use this feature to retrieve values from a multiple select input: Example 7-2. More complex form variables
1 2
13
If PHP’s track_vars feature is turned on, either by the track_vars configuration setting or the directive, then variables submitted via the POST or GET methods will also be found in the global associative arrays $HTTP_POST_VARS and $HTTP_GET_VARS as appropriate.
IMAGE SUBMIT variable names
When submitting a form, it is possible to use an image instead of the standard submit button with a tag like:
1 2
3
When the user clicks somewhere on the image, the accompanying form will be transmitted to the server with two additional variables, sub_x and sub_y. These contain the coordinates of the user click within the image. The experienced may note that the actual variable names sent by the browser contains a period rather than an underscore, but PHP converts the period to an underscore automatically.
104
Chapter 7. Variables
HTTP Cookies
PHP transparently supports HTTP cookies as defined by Netscape’s Spec (http://www.netscape.com/newsref/std/cookie_spec.html). Cookies are a mechanism for storing data in the remote browser and thus tracking or identifying return users. You can set cookies using the SetCookie() function. Cookies are part of the HTTP header, so the SetCookie function must be called before any output is sent to the browser. This is the same restriction as for the Header() function. Any cookies sent to you from the client will automatically be turned into a PHP variable just like GET and POST method data. If you wish to assign multiple values to a single cookie, just add [] to the cookie name. For example:
1 2 SetCookie ("MyCookie[]", "Testing", time()+3600); 3
Note that a cookie will replace a previous cookie by the same name in your browser unless the path or domain is different. So, for a shopping cart application you may want to keep a counter and pass this along. i.e. Example 7-3. SetCookie Example
1 2 $Count++; 3 SetCookie ("Count", $Count, time()+3600); 4 SetCookie ("Cart[$Count]", $item, time()+3600); 5
Environment variables
PHP automatically makes environment variables available as normal PHP variables.
1 2 echo $HOME; 3
/* Shows the HOME environment variable, if set. */
Since information coming in via GET, POST and Cookie mechanisms also automatically create PHP variables, it is sometimes best to explicitly read a variable from the environment in order to make sure that you are getting the right version. The getenv() function can be used for this. You can also set an environment variable with the putenv() function.
105
Chapter 7. Variables
Dots in incoming variable names
Typically, PHP does not alter the names of variables when they are passed into a script. However, it should be noted that the dot (period, full stop) is not a valid character in a PHP variable name. For the reason, look at it:
1 2 $varname.ext; 3
/* invalid variable name */
Now, what the parser sees is a variable named $varname, followed by the string concatenation operator, followed by the barestring (i.e. unquoted string which doesn’t match any known key or reserved words) ’ext’. Obviously, this doesn’t have the intended result. For this reason, it is important to note that PHP will automatically replace any dots in incoming variable names with underscores.
Determining variable types
Because PHP determines the types of variables and converts them (generally) as needed, it is not always obvious what type a given variable is at any one time. PHP includes several functions which find out what type a variable is. They are gettype(), is_long(), is_double(), is_string(), is_array(), and is_object().
106
Chapter 8. Constants
PHP defines several constants and provides a mechanism for defining more at run-time. Constants are much like variables, save for the two facts that constants must be defined using the define() function, and that they cannot later be redefined to another value. The predefined constants (always available) are: __FILE__ The name of the script file presently being parsed. If used within a file which has been included or required, then the name of the included file is given, and not the name of the parent file. __LINE__ The number of the line within the current script file which is being parsed. If used within a file which has been included or required, then the position within the included file is given. PHP_VERSION The string representation of the version of the PHP parser presently in use; e.g. ’3.0.8-dev’. PHP_OS The name of the operating system on which the PHP parser is executing; e.g. ’Linux’. TRUE A true value. FALSE A false value. E_ERROR Denotes an error other than a parsing error from which recovery is not possible. E_WARNING Denotes a condition where PHP knows something is wrong, but will continue anyway; these can be caught by the script itself. An example would be an invalid regexp in ereg(). E_PARSE The parser choked on invalid syntax in the script file. Recovery is not possible. E_NOTICE Something happened which may or may not be an error. Execution continues. Examples include using an unquoted string as a hash index, or accessing a variable which has not been set.
107
Chapter 8. Constants
E_NOTICE Something happened which may or may not be an error. Execution continues. Examples include using an unquoted string as a hash index, or accessing a variable which has not been set. E_ALL All of the E_* constants rolled into one. If used with error_reporting(), will cause any and all problems noticed by PHP to be reported. The E_* constants are typically used with the error_reporting() function for setting the error reporting level. You can define additional constants using the define() function. Note that these are constants, not C-style macros; only valid scalar data may be represented by a constant. Example 8-1. Defining Constants
1 2 3 4 5 6
Example 8-2. Using __FILE__ and __LINE__
1 2 3 4 5 6 7 8 9
108
Chapter 9. Expressions
Expressions are the most important building stones of PHP. In PHP, almost anything you write is an expression. The simplest yet most accurate way to define an expression is "anything that has a value". The most basic forms of expressions are constants and variables. When you type "$a = 5", you’re assigning ’5’ into $a. ’5’, obviously, has the value 5, or in other words ’5’ is an expression with the value of 5 (in this case, ’5’ is an integer constant). After this assignment, you’d expect $a’s value to be 5 as well, so if you wrote $b = $a, you’d expect it to behave just as if you wrote $b = 5. In other words, $a is an expression with the value of 5 as well. If everything works right, this is exactly what will happen. Slightly more complex examples for expressions are functions. For instance, consider the following function:
1 2 function foo () { 3 return 5; 4 } 5
Assuming you’re familiar with the concept of functions (if you’re not, take a look at the chapter about functions), you’d assume that typing $c = foo() is essentially just like writing $c = 5, and you’re right. Functions are expressions with the value of their return value. Since foo() returns 5, the value of the expression ’foo()’ is 5. Usually functions don’t just return a static value but compute something. Of course, values in PHP don’t have to be integers, and very often they aren’t. PHP supports three scalar value types: integer values, floating point values and string values (scalar values are values that you can’t ’break’ into smaller pieces, unlike arrays, for instance). PHP also supports two composite (non-scalar) types: arrays and objects. Each of these value types can be assigned into variables or returned from functions. So far, users of PHP/FI 2 shouldn’t feel any change. However, PHP takes expressions much further, in the same way many other languages do. PHP is an expression-oriented language, in the sense that almost everything is an expression. Consider the example we’ve already dealt with, ’$a = 5’. It’s easy to see that there are two values involved here, the value of the integer constant ’5’, and the value of $a which is being updated to 5 as well. But the truth is that there’s one additional value involved here, and that’s the value of the assignment itself. The assignment itself evaluates to the assigned value, in this case 5. In practice, it means that ’$a = 5’, regardless of what it does, is an expression with the value 5. Thus, writing something like ’$b = ($a = 5)’ is like writing ’$a = 5; $b = 5;’ (a semicolon marks the end of a statement). Since assignments are parsed in a right to left order, you can also write ’$b = $a = 5’. Another good example of expression orientation is pre- and post-increment and decrement. Users of PHP/FI 2 and many other languages may be familiar with the notation of variable++ and variable--.
109
Chapter 9. Expressions
These are increment and decrement operators. In PHP/FI 2, the statement ’$a++’ has no value (is not an expression), and thus you can’t assign it or use it in any way. PHP enhances the increment/decrement capabilities by making these expressions as well, like in C. In PHP, like in C, there are two types of increment - pre-increment and post-increment. Both pre-increment and post-increment essentially increment the variable, and the effect on the variable is idential. The difference is with the value of the increment expression. Pre-increment, which is written ’++$variable’, evaluates to the incremented value (PHP increments the variable before reading its value, thus the name ’pre-increment’). Post-increment, which is written ’$variable++’ evaluates to the original value of $variable, before it was incremented (PHP increments the variable after reading its value, thus the name ’post-increment’). A very common type of expressions are comparison expressions. These expressions evaluate to either 0 or 1, meaning FALSE or TRUE (respectively). PHP supports > (bigger than), >= (bigger than or equal to), == (equal), != (not equal), < (smaller than) and <= (smaller than or equal to). These expressions are most commonly used inside conditional execution, such as if statements. The last example of expressions we’ll deal with here is combined operator-assignment expressions. You already know that if you want to increment $a by 1, you can simply write ’$a++’ or ’++$a’. But what if you want to add more than one to it, for instance 3? You could write ’$a++’ multiple times, but this is obviously not a very efficient or comfortable way. A much more common practice is to write ’$a = $a + 3’. ’$a + 3’ evaluates to the value of $a plus 3, and is assigned back into $a, which results in incrementing $a by 3. In PHP, as in several other languages like C, you can write this in a shorter way, which with time would become clearer and quicker to understand as well. Adding 3 to the current value of $a can be written ’$a += 3’. This means exactly "take the value of $a, add 3 to it, and assign it back into $a". In addition to being shorter and clearer, this also results in faster execution. The value of ’$a += 3’, like the value of a regular assignment, is the assigned value. Notice that it is NOT 3, but the combined value of $a plus 3 (this is the value that’s assigned into $a). Any two-place operator can be used in this operator-assignment mode, for example ’$a -= 5’ (subtract 5 from the value of $a), ’$b *= 7’ (multiply the value of $b by 7), etc. There is one more expression that may seem odd if you haven’t seen it in other languages, the ternary conditional operator:
1 2 $first ? $second : $third 3
If the value of the first subexpression is true (non-zero), then it the second subexpression is evaluated, and that is the result of the conditional expression. Otherwise, the third subexpression is evaluated, and that is the value. The following example should help you understand pre- and post-increment and expressions in general a bit better:
1 2 function double($i) { 3 return $i*2;
110
Chapter 9. Expressions
4 } 5 $b = $a = 5;
/* assign the value five into the vari/* post-increment, assign original value of $a (5) to $c */ /* pre-increment, assign the incremented value of $b (6) to $d and $e */
able $a and $b */ 6 $c = $a++;
7 8 9 10 11 12 13 14 15 16 17 18 19
$e = $d = ++$b;
/* at this point, both $d and $e are equal to 6 */ $f = double($d++);
/* assign twice the value of $d before the increment, 2*6 = 12 to $f */ $g = double(++$e); /* assign twice the value of $e after the increment, 2*7 = 14 to $g */ $h = $g += 10; /* first, $g is incremented by 10 and ends with the value of 24. the value of the assignment (24) is then assigned into $h, and $h ends with the value 20 of 24 as well. */
21
In the beginning of the chapter we said that we’ll be describing the various statement types, and as promised, expressions can be statements. However, not every expression is a statement. In this case, a statement has the form of ’expr’ ’;’ that is, an expression followed by a semicolon. In ’$b=$a=5;’, $a=5 is a valid expression, but it’s not a statement by itself. ’$b=$a=5;’ however is a valid statement. One last thing worth mentioning is the truth value of expressions. In many events, mainly in conditional execution and loops, you’re not interested in the specific value of the expression, but only care about whether it means TRUE or FALSE (PHP doesn’t have a dedicated boolean type). The truth value of expressions in PHP is calculated in a similar way to perl. Any numeric non-zero numeric value is TRUE, zero is FALSE. Be sure to note that negative values are non-zero and are thus considered TRUE! The empty string and the string "0" are FALSE; all other strings are TRUE. With non-scalar values (arrays and objects) - if the value contains no elements it’s considered FALSE, otherwise it’s considered TRUE. PHP provides a full and powerful implementation of expressions, and documenting it entirely goes beyond the scope of this manual. The above examples should give you a good idea about what expressions are and how you can construct useful expressions. Throughout the rest of this manual we’ll write expr to indicate any valid PHP expression.
111
Chapter 10. Operators
Arithmetic Operators
Remember basic arithmetic from school? These work just like those. Table 10-1. Arithmetic Operators example $a + $b $a - $b $a * $b $a / $b $a % $b name Addition Subtraction Multiplication Division Modulus result Sum of $a and $b. Difference of $a and $b. Product of $a and $b. Quotient of $a and $b. Remainder of $a divided by $b.
Assignment Operators
The basic assignment operator is "=". Your first inclination might be to think of this as "equal to". Don’t. It really means that the the left operand gets set to the value of the expression on the rights (that is, "gets set to"). The value of an assignment expression is the value assigned. That is, the value of "$a = 3" is 3. This allows you to do some tricky things:
1 2 $a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4. 3
In addition to the basic assignment operator, there are "combined operators" for all of the binary arithmetic and string operators that allow you to use a value in an expression and then set its value to the result of that expression. For example:
1 2 3 4 5 6
$a $a $b $b
= 3; += 5; // sets $a to 8, as if we had said: $a = $a + 5; = "Hello "; .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";
112
Chapter 10. Operators
Note that the assignment copies the original variable to the new one (assignment by value), so changes to one will not affect the other. This may also have relevance if you need to copy something like a large array inside a tight loop. PHP4 supports assignment by reference, using the $var = &$othervar; syntax, but this is not possible in PHP3. ’Assignment by reference’ means that both variables end up pointing at the same data, and nothing is copied anywhere.
Bitwise Operators
Bitwise operators allow you to turn specific bits within an integer on or off. Table 10-2. Bitwise Operators example $a & $b $a | $b $a ^ $b ~ $a $a << $b name And Or Xor Not Shift left result Bits that are set in both $a and $b are set. Bits that are set in either $a or $b are set. Bits that are set in $a or $b but not both are set. Bits that are set in $a are not set, and vice versa. Shift the bits of $a $b steps to the left (each step means "multiply by two") Shift the bits of $a $b steps to the right (each step means "divide by two")
$a >> $b
Shift right
Comparison Operators
Comparison operators, as their name implies, allow you to compare two values. Table 10-3. Comparison Operators example $a == $b name Equal result True if $a is equal to $b.
113
Chapter 10. Operators
example $a === $b
name Identical
result True if $a is equal to $b, and they are of the same type. (PHP4 only) True if $a is not equal to $b. True if $a is strictly less than $b. True if $a is strictly greater than $b. True if $a is less than or equal to $b. True if $a is greater than or equal to $b.
$a != $b $a < $b $a > $b $a <= $b $a >= $b
Not equal Less than Greater than Less than or equal to Greater than or equal to
Another conditional operator is the "?:" (or trinary) operator, which operates as in C and many other languages.
1 2 (expr1) ? (expr2) : (expr3); 3
This expression evaluates to expr2 if expr1 evaluates to true, and expr3 if expr1 evaluates to false.
Error control Operators
PHP supports one error control operator: the at sign (@). When prepended to an expression in PHP, any error messages that might be generated by that expression will be ignored. If the track_errors feature is enabled, any error message generated by the expression will be saved in the global variable $php_errormsg. This variable will be overwritten on each error, so check early if you want to use it.
1 2 3 4 5 6 7
See also error_reporting().
114
Chapter 10. Operators
Execution Operators
PHP supports one execution operator: backticks (“). Note that these are not single-quotes! PHP will attempt to execute the contents of the backticks as a shell command; the output will be returned (i.e., it won’t simply be dumped to output; it can be assigned to a variable).
1 2 $output = ‘ls -al‘; 3 echo "
$output
"; 4
See also system(), passthru(), exec(), popen(), and escapeshellcmd().
Incrementing/Decrementing Operators
PHP supports C-style pre- and post-increment and decrement operators. Table 10-4. Increment/decrement Operators example ++$a $a++ --$a $a-name Pre-increment Post-increment Pre-decrement Post-decrement effect Increments $a by one, then returns $a. Returns $a, then increments $a by one. Decrements $a by one, then returns $a. Returns $a, then decrements $a by one.
Here’s a simple example script:
1 2 3 4 5 6 7 8 9 10 11 12
Postincrement"; $a = 5; echo "Should be 5: " . $a++ . "
\n"; echo "Should be 6: " . $a . "
\n"; echo $a = echo echo "
Preincrement
"; 5; "Should be 6: " . ++$a . "
\n"; "Should be 6: " . $a . "
\n";
115
Chapter 10. Operators
13 14 15 16 17 18 19 20 21 22 23
echo $a = echo echo echo $a = echo echo ?>
"
Postdecrement
"; 5; "Should be 5: " . $a-- . "
\n"; "Should be 4: " . $a . "
\n"; "
Predecrement
"; 5; "Should be 4: " . --$a . "
\n"; "Should be 4: " . $a . "
\n";
Logical Operators
Table 10-5. Logical Operators example $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b name And Or Or Not And Or result True if both $a and $b are true. True if either $a or $b is true. True if either $a or $b is true, but not both. True if $a is not true. True if both $a and $b are true. True if either $a or $b is true.
The reason for the two different variations of "and" and "or" operators is that they operate at different precedences. (See Operator Precedence.)
Operator Precedence
The precedence of an operator specifies how "tightly" it binds two expressions together. For example, in the expression 1 + 5 * 3, the answer is 16 and not 18 because the multiplication ("*") operator has a higher precedence than the addition ("+") operator. The following table lists the precedence of operators with the lowest-precedence operators listed first. Table 10-6. Operator Precedence
116
Chapter 10. Operators
Associativity left left left left right left left left left left left left non-associative non-associative left left left right right non-associative
Operators , or xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new
String Operators
There are two string operators. The first is the concatenation operator (’.’), which returns the concatenation of its right and left arguments. The second is the concatenating assignment operator (’.=’). Please read Assignment Operators for more information.
1 2 3 4 5 6 7
$a = "Hello "; $b = $a . "World!"; // now $b contains "Hello World!" $a = "Hello "; $a .= "World!"; // now $a contains "Hello World!"
117
Chapter 11. Control Structures
Any PHP script is built out of a series of statements. A statement can be an assignment, a function call, a loop, a conditional statement of even a statement that does nothing (an empty statement). Statements usually end with a semicolon. In addition, statements can be grouped into a statement-group by encapsulating a group of statements with curly braces. A statement-group is a statement by itself as well. The various statement types are described in this chapter.
if
The if construct is one of the most important features of many languages, PHP included. It allows for conditional execution of code fragments. PHP features an if structure that is similar to that of C:
1 2 if (expr) 3 statement 4
As described in the section about expressions, expr is evaluated to its truth value. If expr evaluates to TRUE, PHP will execute statement, and if it evaluates to FALSE - it’ll ignore it. The following example would display a is bigger than b if $a is bigger than $b:
1 2 if ($a > $b) 3 print "a is bigger than b"; 4
Often you’d want to have more than one statement to be executed conditionally. Of course, there’s no need to wrap each statement with an if clause. Instead, you can group several statements into a statement group. For example, this code would display a is bigger than b if $a is bigger than $b, and would then assign the value of $a into $b:
1 2 if ($a > $b) { 3 print "a is bigger than b"; 4 $b = $a; 5 } 6
If statements can be nested indefinitely within other if statements, which provides you with complete flexibility for conditional execution of the various parts of your program.
118
Chapter 11. Control Structures
else
Often you’d want to execute a statement if a certain condition is met, and a different statement if the condition is not met. This is what else is for. else extends an if statement to execute a statement in case the expression in the if statement evaluates to FALSE. For example, the following code would display a is bigger than b if $a is bigger than $b, and a is NOT bigger than b otherwise:
1 2 if ($a > $b) { 3 print "a is bigger than b"; 4 } else { 5 print "a is NOT bigger than b"; 6 } 7
The else statement is only executed if the if expression evaluated to FALSE, and if there were any elseif expressions - only if they evaluated to FALSE as well (see elseif).
elseif
elseif, as its name suggests, is a combination of if and else. Like else, it extends an if statement to execute a different statement in case the original if expression evaluates to FALSE. However, unlike else, it will execute that alternative expression only if the elseif conditional expression evaluates to TRUE. For example, the following code would display a is bigger than b, a equal to b or a is smaller than b:
1 2 3 4 5 6 7 8 9
if ($a > $b) print "a } elseif ($a print "a } else { print "a }
{ is bigger than b"; == $b) { is equal to b"; is smaller than b";
There may be several elseifs within the same if statement. The first elseif expression (if any) that evaluates to true would be executed. In PHP, you can also write ’else if’ (in two words) and the behavior would be identical to the one of ’elseif’ (in a single word). The syntactic meaning is slightly different (if you’re familiar with C, this is the same behavior) but the bottom line is that both would result in exactly the same behavior.
119
Chapter 11. Control Structures
The elseif statement is only executed if the preceding if expression and any preceding elseif expressions evaluated to FALSE, and the current elseif expression evaluated to TRUE.
Alternative syntax for control structures
PHP offers an alternative syntax for some of its control structures; namely, if, while, for, and switch. In each case, the basic form of the alternate syntax is to change the opening brace to a colon (:) and the closing brace to endif;, endwhile;, endfor;, or endswitch;, respectively.
1 2 3 4 5
A is equal to 5
In the above example, the HTML block "A = 5" is nested within an if statement written in the alternative syntax. The HTML block would be displayed only if $a is equal to 5. The alternative syntax applies to else and elseif as well. The following is an if structure with elseif and else in the alternative format:
1 2 3 4 5 6 7 8 9 10 11
if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!"; else: print "a is neither 5 nor 6"; endif;
See also while, for, and if for further examples.
while
while loops are the simplest type of loop in PHP. They behave just like their C counterparts. The basic form of a while statement is:
1 2 while (expr) statement
120
Chapter 11. Control Structures
3
The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE. The value of the expression is checked each time at the beginning of the loop, so even if this value changes during the execution of the nested statement(s), execution will not stop until the end of the iteration (each time PHP runs the statements in the loop is one iteration). Sometimes, if the while expression evaluates to FALSE from the very beginning, the nested statement(s) won’t even be run once. Like with the if statement, you can group multiple statements within the same while loop by surrounding a group of statements with curly braces, or by using the alternate syntax:
1 2 while (expr): statement ... endwhile; 3
The following examples are identical, and both print numbers from 1 to 10:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/* example 1 */ $i = 1; while ($i <= 10) { print $i++; /* the printed value would be $i before the increment (post-increment) */ } /* example 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile;
do..while
do..while loops are very similar to while loops, except the truth expression is checked at the end of each iteration instead of in the beginning. The main difference from regular while loops is that the first iteration of a do..while loop is guarenteed to run (the truth expression is only checked at the end of the iteration), whereas it’s may not necessarily run with a regular while loop (the truth
121
Chapter 11. Control Structures
expression is checked at the beginning of each iteration, if it evaluates to FALSE right from the beginning, the loop execution would end immediately). There is just one syntax for do..while loops:
1 2 $i = 0; 3 do { 4 print $i; 5 } while ($i>0); 6
The above loop would run one time exactly, since after the first iteration, when truth expression is checked, it evaluates to FALSE ($i is not bigger than 0) and the loop execution ends. Advanced C users may be familiar with a different usage of the do..while loop, to allow stopping execution in the middle of code blocks, by encapsulating them with do..while(0), and using the break statement. The following code fragment demonstrates this:
1 2 do { 3 if ($i < 5) { 4 print "i is not big enough"; 5 break; 6 } 7 $i *= $factor; 8 if ($i < $minimum_limit) { 9 break; 10 } 11 print "i is ok"; 12 13 ...process i... 14 15 } while(0); 16
Don’t worry if you don’t understand this right away or at all. You can code scripts and even powerful scripts without using this ‘feature’.
for
for loops are the most complex loops in PHP. They behave like their C counterparts. The syntax of a for loop is:
1
122
Chapter 11. Control Structures
2 for (expr1; expr2; expr3) statement 3
The first expression (expr1) is evaluated (executed) once unconditionally at the beginning of the loop. In the beginning of each iteration, expr2 is evaluated. If it evaluates to TRUE, the loop continues and the nested statement(s) are executed. If it evaluates to FALSE, the execution of the loop ends. At the end of each iteration, expr3 is evaluated (executed). Each of the expressions can be empty. expr2 being empty means the loop should be run indefinitely (PHP implicitly considers it as TRUE, like C). This may not be as useless as you might think, since often you’d want to end the loop using a conditional break statement instead of using the for truth expression. Consider the following examples. All of them display numbers from 1 to 10:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/* example 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* example 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } /* example 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* example 4 */ for ($i = 1; $i <= 10; print $i, $i++) ;
123
Chapter 11. Control Structures
Of course, the first example appears to be the nicest one (or perhaps the fourth), but you may find that being able to use empty expressions in for loops comes in handy in many occasions. PHP also supports the alternate "colon syntax" for for loops.
1 2 for (expr1; expr2; expr3): statement; ...; endfor; 3
Other languages have a foreach statement to traverse an array or hash. PHP3 has no such construct; PHP4 does (see foreach). In PHP3, you can combine while with the list() and each() functions to achieve the same effect. See the documentation for these functions for an example.
foreach
PHP4 (not PHP3) includes a foreach construct, much like perl and some other languages. This simply gives an easy way to iterate over arrays. There are two syntaxes; the second is a minor but useful extension of the first:
1 2 foreach(array_expression as $value) statement 3 foreach(array_expression as $key => $value) statement 4
The first form loops over the array given by array_expression. On each loop, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next loop, you’ll be looking at the next element). The second form does the same thing, except that the current element’s key will be assigned to the variable $key on each loop. When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop. You may have noticed that the following are functionally identical:
1 2 3 4 5 6 7 8 9 10
reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value
\n"; } foreach ($arr as $value) { echo "Value: $value
\n"; }
124
Chapter 11. Control Structures
The following are also functionally identical:
1 2 3 4 5 6 7 8 9 10
reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value
\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value
\n"; }
Some more examples to demonstrate usages:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/* foreach example 1: value only */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Current value of \$a: $v.\n"; } /* foreach example 2: value (with key printed for illustration) */ $a = array (1, 2, 3, 17); $i = 0; /* for illustrative purposes only */ foreach($a as $v) { print "\$a[$i] => $k.\n"; } /* foreach example 3: key and value */ $a = array ( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; }
125
Chapter 11. Control Structures
break
break ends execution of the current for, while, or switch structure. break accepts an optional numeric argument which tells it how many nested enclosing structures are
to be broken out of.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
$arr = array( ’one’, ’two’, ’three’, ’four’, ’stop’, ’five’ ); while ( list( , $val ) = each( $arr ) ) { if ( $val == ’stop’ ) { break; /* You could also write ’break 1;’ here. */ } echo "$val
\n"; } /* Using the optional argument. */ $i = 0; while ( ++$i ) { switch ( $i ) { case 5: echo "At 5
\n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting
\n"; break 2; /* Exit the switch and the while. */ default: break; } }
continue
continue is used within looping structures to skip the rest of the current loop iteration and continue
execution at the beginning of the next iteration.
continue accepts an optional numeric argument which tells it how many levels of enclosing loops
it should skip to the end of.
1 2 while (list ($key, $value) = each ($arr)) { 3 if (!($key % 2)) { // skip odd members 4 continue; 5 }
126
Chapter 11. Control Structures
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer
\n"; while (1) { echo " Middle
\n"; while (1) { echo " Inner
\n"; continue 3; } echo "This never gets output.
\n"; } echo "Neither does this.
\n"; }
switch
The switch statement is similar to a series of IF statements on the same expression. In many occasions, you may want to compare the same variable (or expression) with many different values, and execute a different piece of code depending on which value it equals to. This is exactly what the switch statement is for. The following two examples are two different ways to write the same thing, one using a series of if statements, and the other using the switch statement:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
if ($i == print } if ($i == print } if ($i == print }
0) { "i equals 0"; 1) { "i equals 1"; 2) { "i equals 2";
switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break;
127
Chapter 11. Control Structures
19 20 21 22 } 23
case 2: print "i equals 2"; break;
It is important to understand how the switch statement is executed in order to avoid mistakes. The switch statement executes line by line (actually, statement by statement). In the beginning, no code is executed. Only when a case statement is found with a value that matches the value of the switch expression does PHP begin to execute the statements. PHP continues to execute the statements until the end of the switch block, or the first time it sees a break statement. If you don’t write a break statement at the end of a case’s statement list, PHP will go on executing the statements of the following case. For example:
1 2 switch ($i) { 3 case 0: 4 print "i equals 0"; 5 case 1: 6 print "i equals 1"; 7 case 2: 8 print "i equals 2"; 9 } 10
Here, if $i equals to 0, PHP would execute all of the print statements! If $i equals to 1, PHP would execute the last two print statements, and only if $i equals to 2, you’d get the ’expected’ behavior and only ’i equals 2’ would be displayed. So, it’s important not to forget break statements (even though you may want to avoid supplying them on purpose under certain circumstances). In a switch statement, the condition is evaluated only once and the result is compared to each case statement. In an elseif statement, the condition is evaluated again. If your condition is more complicated than a simple compare and/or is in a tight loop, a switch may be faster. The statement list for a case can also be empty, which simply passes control into the statement list for the next case.
1 2 switch ($i) { 3 case 0: 4 case 1: 5 case 2: 6 print "i is less than 3 but not negative"; 7 break; 8 case 3: 9 print "i is 3"; 10 }
128
Chapter 11. Control Structures
11
A special case is the default case. This case matches anything that wasn’t matched by the other cases. For example:
1 2 switch ($i) { 3 case 0: 4 print "i 5 break; 6 case 1: 7 print "i 8 break; 9 case 2: 10 print "i 11 break; 12 default: 13 print "i 14 } 15
equals 0";
equals 1";
equals 2";
is not equal to 0, 1 or 2";
The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings. Arrays or objects cannot be used here unless they are dereferenced to a simple type. The alternative syntax for control structures is supported with switches. For more information, see Alternative syntax for control structures .
1 2 switch ($i): 3 case 0: 4 print "i 5 break; 6 case 1: 7 print "i 8 break; 9 case 2: 10 print "i 11 break; 12 default: 13 print "i 14 endswitch; 15
equals 0";
equals 1";
equals 2";
is not equal to 0, 1 or 2";
129
Chapter 11. Control Structures
require()
The require() statement replaces itself with the specified file, much like the C preprocessor’s #include works. An important note about how this works is that when a file is include()ed or require()ed, parsing drops out of PHP mode and into HTML mode at the beginning of the target file, and resumes PHP mode again at the end. For this reason, any code inside the target file which should be executed as PHP code must be enclosed within valid PHP start and end tags. require() is not actually a function in PHP; rather, it is a language construct. It is subject to some different rules than functions are. For instance, require() is not subject to any containing control structures. For another, it does not return any value; attempting to read a return value from a require() call results in a parse error. Unlike include(), require() will always read in the target file, even if the line it’s on never executes. If you want to conditionally include a file, use include(). The conditional statement won’t affect the require(). However, if the line on which the require() occurs is not executed, neither will any of the code in the target file be executed. Similarly, looping structures do not affect the behaviour of require(). Although the code contained in the target file is still subject to the loop, the require() itself happens only once. This means that you can’t put a require() statement inside of a loop structure and expect it to include the contents of a different file on each iteration. To do that, use an include() statement.
1 2 require (’header.inc’); 3
Please note that both include() and require() actually pull the contents of the target file into the calling script file itself; they do not call the target via HTTP or anything like that. So any variable set in the scope in which the inclusion happens will be available within the included file automatically, since it has effectively become a part of the calling file.
1 2 3 4 5 6 7
require ("file.inc?varone=1&vartwo=2"); /* Won’t work. */
$varone = 1; $vartwo = 2; require ("file.inc"); able in file.inc */
/* $varone and $vartwo will be avail-
Don’t be misled by the fact that you can require or include files via HTTP using the Remote files feature; the above holds true regardless.
130
Chapter 11. Control Structures
In PHP3, it is possible to execute a return statement inside a require()ed file, as long as that statement occurs in the global scope of the require()ed file. It may not occur within any block (meaning inside braces ({}). In PHP4, however, this ability has been discontinued. If you need this functionality, see include().
include()
The include() statement includes and evaluates the specified file. An important note about how this works is that when a file is include()ed or require()ed, parsing drops out of PHP mode and into HTML mode at the beginning of the target file, and resumes again at the end. For this reason, any code inside the target file which should be executed as PHP code must be enclosed within valid PHP start and end tags. This happens each time the include() statement is encountered, so you can use an include() statement within a looping structure to include a number of different files.
1 2 $files = array (’first.inc’, ’second.inc’, ’third.inc’); 3 for ($i = 0; $i < count($files); $i++) { 4 include $files[$i]; 5 } 6
include() differs from require() in that the include statement is re-evaluated each time it is encountered (and only when it is being executed), whereas the require() statement is replaced by the required file when it is first encountered, whether the contents of the file will be evaluated or not (for example, if it is inside an if statement whose condition evaluated to false). Because include() is a special language construct, you must enclose it within a statement block if it is inside a conditional block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* This is WRONG and will not work as desired. */ if ($condition) include($file); else include($other); /* This is CORRECT. */ if ($condition) { include($file); } else { include($other);
131
Chapter 11. Control Structures
15 } 16
In both PHP3 and PHP4, it is possible to execute a return statement inside an include()ed file, in order to terminate processing in that file and return to the script which called it. Some differences in the way this works exist, however. The first is that in PHP3, the return may not appear inside a block unless it’s a function block, in which case the return applies to that function and not the whole file. In PHP4, however, this restriction does not exist. Also, PHP4 allows you to return values from include()ed files. You can take the value of the include() call as you would a normal function. This generates a parse error in PHP3. Example 11-1. include() in PHP3 and PHP4 Assume the existence of the following file (named test.inc) in the same directory as the main file:
1 2 3 4 5 6 7 8 9
\n"; if (1) { return 27; } echo "After the return
\n"; ?>
Assume that the main file (main.html) contains the following:
1 2 3 4 5 6
\n"; ?>
When main.html is called in PHP3, it will generate a parse error on line 2; you can’t take the value of an include() in PHP3. In PHP4, however, the result will be:
Before the return File returned: ’27’
Now, assume that main.html has been altered to contain the following:
1 2 3 4 5 6
\n"; ?>
In PHP4, the output will be:
132
Chapter 11. Control Structures
Before the return Back in main.html
However, PHP3 will give the following output:
Before the return 27Back in main.html Parse error: parse error in /home/torben/public_html/phptest/main.html on line 5
The above parse error is a result of the fact that the return statement is enclosed in a non-function block within test.inc. When the return is moved outside of the block, the output is:
Before the return 27Back in main.html
The spurious ’27’ is due to the fact that PHP3 does not support returning values from files like that. Please note that both include() and require() actually pull the contents of the target file into the calling script file itself; they do not call the target via HTTP or anything like that. So any variable set in the scope in which the inclusion happens will be available within the included file automatically, since it has effectively become a part of the calling file.
1 2 3 4 5 6 7
include ("file.inc?varone=1&vartwo=2"); /* Won’t work. */
$varone = 1; $vartwo = 2; include ("file.inc"); able in file.inc */
/* $varone and $vartwo will be avail-
Don’t be misled by the fact that you can require or include files via HTTP using the Remote files feature; the above holds true regardless. See also readfile(), require(), and virtual().
133
Chapter 12. Functions
User-defined functions
A function may be defined using syntax such as the following:
1 2 function foo ($arg_1, $arg_2, ..., $arg_n) { 3 echo "Example function.\n"; 4 return $retval; 5 } 6
Any valid PHP code may appear inside a function, even other functions and class definitions. In PHP3, functions must be defined before they are referenced. No such requirement exists in PHP4. PHP does not support function overloading, nor is it possible to undefine or redefine previously-declared functions. PHP3 does not support variable numbers of arguments to functions, although default arguments are supported (see Default argument values for more information). PHP4 supports both: see Variable-length argument lists and the function references for func_num_args(), func_get_arg(), and func_get_args() for more information.
Function arguments
Information may be passed to functions via the argument list, which is a comma-delimited list of variables and/or constants. PHP supports passing arguments by value (the default), passing by reference, and default argument values. Variable-length argument lists are supported only in PHP4 and later; see Variable-length argument lists and the function references for func_num_args(), func_get_arg(), and func_get_args() for more information. A similar effect can be achieved in PHP3 by passing an array of arguments to a function:
1 2 function takes_array($input) { 3 echo "$input[0] + $input[1] = ", $input[0]+$input[1]; 4 } 5
134
Chapter 12. Functions
Making arguments be passed by reference
By default, function arguments are passed by value (so that if you change the value of the argument within the function, it does not get changed outside of the function). If you wish to allow a function to modify its arguments, you must pass them by reference. If you want an argument to a function to always be passed by reference, you can prepend an ampersand (&) to the argument name in the function definition:
1 2 3 4 5 6 7 8
function add_some_extra(&$string) { $string .= ’and something extra.’; } $str = ’This is a string, ’; add_some_extra($str); echo $str; // outputs ’This is a string, and something extra.’
If you wish to pass a variable by reference to a function which does not do this by default, you may prepend an ampersand to the argument name in the function call:
1 2 3 4 5 6 7 8 9 10
function foo ($bar) { $bar .= ’ and something extra.’; } $str = ’This is a string, ’; foo ($str); echo $str; // outputs ’This is a string, ’ foo (&$str); echo $str; // outputs ’This is a string, and something extra.’
Default argument values
A function may define C++-style default values for scalar arguments as follows:
1 2 3 4 5 6 7
function makecoffee ($type = "cappucino") { return "Making a cup of $type.\n"; } echo makecoffee (); echo makecoffee ("espresso");
The output from the above snippet is:
135
Chapter 12. Functions
Making a cup of cappucino. Making a cup of espresso.
The default value must be a constant expression, not (for example) a variable or class member. Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected. Consider the following code snippet:
1 2 function makeyogurt ($type = "acidophilus", $flavour) { 3 return "Making a bowl of $type $flavour.\n"; 4 } 5 6 echo makeyogurt ("raspberry"); // won’t work as expected 7
The output of the above example is:
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Making a bowl of raspberry .
Now, compare the above with this:
1 2 function makeyogurt ($flavour, $type = "acidophilus") { 3 return "Making a bowl of $type $flavour.\n"; 4 } 5 6 echo makeyogurt ("raspberry"); // works as expected 7
The output of this example is:
Making a bowl of acidophilus raspberry.
Variable-length argument lists
PHP4 has support for variable-length argument lists in user-defined functions. This is really quite easy, using the func_num_args(), func_get_arg(), and func_get_args() functions.
136
Chapter 12. Functions
No special syntax is required, and argument lists may still be explicitly provided with function definitions and will behave as normal.
Returning values
Values are returned by using the optional return statement. Any type may be returned, including lists and objects.
1 2 function square ($num) { 3 return $num * $num; 4 } 5 echo square (4); // outputs ’16’. 6
You can’t return multiple values from a function, but similar results can be obtained by returning a list.
1 2 function small_numbers() { 3 return array (0, 1, 2); 4 } 5 list ($zero, $one, $two) = small_numbers(); 6
old_function
The old_function statement allows you to declare a function using a syntax identical to PHP/FI2 (except you must replace ’function’ with ’old_function’. This is a deprecated feature, and should only be used by the PHP/FI2->PHP3 convertor.
Warning
Functions declared as old_function cannot be called from PHP’s internal code. Among other things, this means you can’t use them in functions such as usort(), array_walk(), and register_shutdown_function(). You can get around this limitation by writing a wrapper function (in normal PHP3 form) to call the old_function.
137
Chapter 12. Functions
Variable functions
PHP supports the concept of variable functions. This means that if a variable name has parentheses appended to it, PHP will look for a function with the same name as whatever the variable evaluates to, and will attempt to execute it. Among other things, this can be used to implement callbacks, function tables, and so forth. Example 12-1. Variable function example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
\n"; } function bar( $arg = ” ) { echo "In bar(); argument was ’$arg’.
\n"; } $func = ’foo’; $func(); $func = ’bar’; $func( ’test’ ); ?>
138
Chapter 13. Classes and Objects
class
A class is a collection of variables and functions working with these variables. A class is defined using the following syntax:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?>
This defines a class named Cart that consists of an associative array of articles in the cart and two functions to add and remove items from this cart. Classes are types, that is, they are blueprints for actual variables. You have to create a variable of the desired type with the new operator.
1 2 3 4
$cart = new Cart; $cart->add_item("10", 1);
This creates an object $cart of the class Cart. The function add_item() of that object is being called to add 1 item of article number 10 to the cart.
139
Chapter 13. Classes and Objects
Classes can be extensions of other classes. The extended or derived class has all variables and functions of the base class and what you add in the extended definition. This is done using the extends keyword. Multiple inheritance is not supported.
1 2 class Named_Cart extends Cart { 3 var $owner; 4 5 function set_owner ($name) { 6 $this->owner = $name; 7 } 8 } 9
This defines a class Named_Cart that has all variables and functions of Cart plus an additional variable $owner and an additional function set_owner(). You create a named cart the usual way and can now set and get the carts owner. You can still use normal cart functions on named carts:
1 2 3 4 5 6
$ncart = new Named_Cart; $ncart->set_owner ("kris"); print $ncart->owner; $ncart->add_item ("10", 1);
// // // //
Create a named cart Name that cart print the cart owners name (inherited functionality from cart)
Within functions of a class the variable $this means this object. You have to use $this->something to access any variable or function named something within your current object. Constructors are functions in a class that are automatically called when you create a new instance of a class. A function becomes a constructor when it has the same name as the class.
1 2 class Auto_Cart extends Cart { 3 function Auto_Cart () { 4 $this->add_item ("10", 1); 5 } 6 } 7
This defines a class Auto_Cart that is a Cart plus a constructor which initializes the cart with one item of article number "10" each time a new Auto_Cart is being made with "new". Constructors can also take arguments and these arguments can be optional, which makes them much more useful.
1 2 class Constructor_Cart extends Cart { 3 function Constructor_Cart ($item = "10", $num = 1) { 4 $this->add_item ($item, $num); 5 }
140
Chapter 13. Classes and Objects
6 7 8 9 10 11 12 13 14 15
} // Shop the same old boring stuff. $default_cart = new Constructor_Cart;
// Shop for real... $different_cart = new Constructor_Cart ("20", 17);
Caution
For derived classes, the constructor of the parent class is not automatically called when the derived class’s constructor is called.
141
III. Features
142
Chapter 14. Error handling
There are 4 types of errors and warnings in PHP. They are:
• • • •
1 - Normal Function Errors 2 - Normal Warnings 4 - Parser Errors 8 - Notices (warnings you can ignore but which may imply a bug in your code)
The above 4 numbers are added up to define an error reporting level. The default error reporting level is 7 which is 1 + 2 + 4, or everything except notices. This level can be changed in the php3.ini file with the error_reporting directive. It can also be set in your Apache httpd.conf file with the php3_error_reporting directive or lastly it may be set at runtime within a script using the error_reporting() function. All PHP expressions can also be called with the "@" prefix, which turns off error reporting for that particular expression. If an error occurred during such an expression and the track_errors feature is enabled, you can find the error message in the global variable $php_errormsg.
143
Chapter 15. Creating GIF images
PHP is not limited to creating just HTML output. It can also be used to create GIF image files, or even more convenient GIF image streams. You will need to compile PHP with the GD library of image functions for this to work. Example 15-1. GIF creation with PHP
1 2 12
This example would be called from a page with a tag like:

The above button.php3 script then takes this "text" string an overlays it on top of a base image which in this case is "images/button1.gif" and outputs the resulting image. This is a very convenient way to avoid having to draw new button images every time you want to change the text of a button. With this method they are dynamically generated.
144
Chapter 16. HTTP authentication with PHP
The HTTP Authentication hooks in PHP are only available when it is running as an Apache module and is hence not available in the CGI version. In an Apache module PHP script, it is possible to use the Header() function to send an "Authentication Required" message to the client browser causing it to pop up a Username/Password input window. Once the user has filled in a username and a password, the URL containing the PHP script will be called again with the variables, $PHP_AUTH_USER, $PHP_AUTH_PW and $PHP_AUTH_TYPE set to the user name, password and authentication type respectively. Only "Basic" authentication is supported at this point. See the Header() function for more information. An example script fragment which would force client authentication on a page would be the following: Example 16-1. HTTP Authentication example
1 2 "; 10 echo "You entered $PHP_AUTH_PW as your password.
"; 11 } 12 ?> 13
Instead of simply printing out the $PHP_AUTH_USER and $PHP_AUTH_PW, you would probably want to check the username and password for validity. Perhaps by sending a query to a database, or by looking up the user in a dbm file. Watch out for buggy Internet Explorer browsers out there. They seem very picky about the order of the headers. Sending the WWW-Authenticate header before the HTTP/1.0 401 header seems to do the trick for now. In order to prevent someone from writing a script which reveals the password for a page that was authenticated through a traditional external mechanism, the PHP_AUTH variables will not be set if external authentication is enabled for that particular page. In this case, the $REMOTE_USER variable can be used to identify the externally-authenticated user. Note, however, that the above does not prevent someone who controls a non-authenticated URL from stealing passwords from authenticated URLs on the same server. Both Netscape and Internet Explorer will clear the local browser window’s authentication cache for the realm upon receiving a server response of 401. This can effectively "log out" a user, forcing them
145
Chapter 16. HTTP authentication with PHP
to re-enter their username and password. Some people use this to "time out" logins, or provide a "log-out" button. Example 16-2. HTTP Authentication example forcing a new name/password
1 2 "; 15 echo "Old: $OldAuth"; 16 echo "
\n";
21 22 } 23 ?> 24 9 10
This behavior is not required by the HTTP Basic authentication standard, so you should never depend on this. Testing with Lynx has shown that Lynx does not clear the authentication credentials with a 401 server response, so pressing back and then forward again will open the resource (as long as the credential requirements haven’t changed). Also note that this does not work using Microsoft’s IIS server and the CGI version of PHP due to a limitation of IIS.
146
Chapter 17. Cookies
PHP transparently supports HTTP cookies. Cookies are a mechanism for storing data in the remote browser and thus tracking or identifying return users. You can set cookies using the setcookie() function. Cookies are part of the HTTP header, so setcookie() must be called before any output is sent to the browser. This is the same limitation that header() has. Any cookies sent to you from the client will automatically be turned into a PHP variable just like GET and POST method data. If you wish to assign multiple values to a single cookie, just add [] to the cookie name. For more details see the setcookie() function.
147
Chapter 18. Handling file uploads
POST method uploads
PHP is capable of receiving file uploads from any RFC-1867 compliant browser (which includes Netscape Navigator 3 or later, Microsoft Internet Explorer 3 with a patch from Microsoft, or later without a patch). This feature lets people upload both text and binary files. With PHP’s authentication and file manipulation functions, you have full control over who is allowed to upload and what is to be done with the file once it has been uploaded. Note that PHP also supports PUT-method file uploads as used by Netscape Composer and W3C’s Amaya clients. See the PUT Method Support for more details. A file upload screen can be built by creating a special form which looks something like this: Example 18-1. File Upload Form
1 2 3 4 5 6 7
The _URL_ should point to a PHP file. The MAX_FILE_SIZE hidden field must precede the file input field and its value is the maximum filesize accepted. The value is in bytes. In this destination file, the following variables will be defined upon a successful upload: $userfile - The temporary filename in which the uploaded file was stored on the server machine. $userfile_name - The original name of the file on the sender’s system. $userfile_size - The size of the uploaded file in bytes. $userfile_type - The mime type of the file if the browser provided this information. An example would be "image/gif".
• • • •
Note that the "$userfile" part of the above variables is whatever the name of the INPUT field of TYPE=file is in the upload form. In the above upload form example, we chose to call it "userfile". Files will by default be stored in the server’s default temporary directory. This can be changed by setting the environment variable TMPDIR in the environment in which PHP runs. Setting it using putenv() from within a PHP script will not work. The PHP script which receives the uploaded file should implement whatever logic is necessary for determining what should be done with the uploaded file. You can for example use the $file_size
148
Chapter 18. Handling file uploads
variable to throw away any files that are either too small or too big. You could use the $file_type variable to throw away any files that didn’t match a certain type criteria. Whatever the logic, you should either delete the file from the temporary directory or move it elsewhere. The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed.
Common Pitfalls
The MAX_FILE_SIZE item cannot specify a file size greater than the file size that has been set in the upload_max_filesize in the PHP3.ini file or the corresponding php3_upload_max_filesize Apache .conf directive. The default is 2 Megabytes. Please note that the CERN httpd seems to strip off everything starting at the first whitespace in the content-type mime header it gets from the client. As long as this is the case, CERN httpd will not support the file upload feature.
Uploading multiple files
It is possible to upload multiple files simultaneously and have the information organized automatically in arrays for you. To do so, you need to use the same array submission syntax in the HTML form as you do with multiple selects and checkboxes:
Note: Support for multiple file uploads was added in version 3.0.10.
Example 18-2. Uploading multiple files
1 2
8
When the above form is submitted, the arrays $userfile, $userfile_name, and $userfile_size will be formed in the global scope (as well as in $HTTP_POST_FILES ($HTTP_POST_VARS in PHP 3)). Each of these will be a numerically indexed array of the appropriate values for the submitted files.
149
Chapter 18. Handling file uploads
For instance, assume that the filenames /home/test/review.html and /home/test/xwp.out are submitted. In this case, $userfile_name[0] would contain the value review.html, and $userfile_name[1] would contain the value xwp.out. Similarly, $userfile_size[0] would contain review.html’s filesize, and so forth.
$userfile[’name’][0], $userfile[’tmp_name’][0], $userfile[’size’][0], and $userfile[’type’][0] are also set.
PUT method support
PHP provides support for the HTTP PUT method used by clients such as Netscape Composer and W3C Amaya. PUT requests are much simpler than a file upload and they look something like this:
1 2 PUT /path/filename.html HTTP/1.1 3
This would normally mean that the remote client would like to save the content that follows as: /path/filename.html in your web tree. It is obviously not a good idea for Apache or PHP to automatically let everybody overwrite any files in your web tree. So, to handle such a request you have to first tell your web server that you want a certain PHP script to handle the request. In Apache you do this with the Script directive. It can be placed almost anywhere in your Apache configuration file. A common place is inside a
block or perhaps inside a block. A line like this would do the trick:
1 2 Script PUT /put.php3 3
This tells Apache to send all PUT requests for URIs that match the context in which you put this line to the put.php3 script. This assumes, of course, that you have PHP enabled for the .php3 extension and PHP is active. Inside your put.php3 file you would then do something like this:
1 2 copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?> 3
This would copy the file to the location requested by the remote client. You would probably want to perform some checks and/or authenticate the user before performing this file copy. The only trick here is that when PHP sees a PUT-method request it stores the uploaded file in a temporary file just like those handled bu the POST-method. When the request ends, this temporary file is deleted. So,
150
Chapter 18. Handling file uploads
your PUT handling PHP script has to copy that file somewhere. The filename of this temporary file is in the $PHP_PUT_FILENAME variable, and you can see the suggested destination filename in the $REQUEST_URI (may vary on non-Apache web servers). This destination filename is the one that the remote client specified. You do not have to listen to this client. You could, for example, copy all uploaded files to a special uploads directory.
151
Chapter 19. Using remote files
As long as support for the "URL fopen wrapper" is enabled when you configure PHP (which it is unless you explicitly pass the --disable-url-fopen-wrapper flag to configure), you can use HTTP and FTP URLs with most functions that take a filename as a parameter, including the require() and include() statements.
Note: You can’t use remote files in include() and require() statements on Windows.
For example, you can use this to open a file on a remote web server, parse the output for the data you want, and then use that data in a database query, or simply to output it in a style matching the rest of your website. Example 19-1. Getting the title of a remote page
1 2 Unable to open remote file.\n"; 6 exit; 7 } 8 while (!feof($file)) { 9 $line = fgets($file, 1024); 10 /* This only works if the title and its tags are on one line. */ 11 if (eregi("(.*)", $line, $out)) { 12 $title = $out[1]; 13 break; 14 } 15 } 16 fclose($file); 17 ?> 18
You can also write to files on an FTP as long you connect as a user with the correct access rights, and the file doesn’t exist already. To connect as a user other than ’anonymous’, you need to specify the username (and possibly password) within the URL, such as ’ftp://user:password@ftp.example.com/path/to/file’. (You can use the same sort of syntax to access files via HTTP when they require Basic authentication.) Example 19-2. Storing data on a remote server
1 2 Unable to open remote file for writing.\n"; 6 exit; 7 } 8 /* Write the data here. */ 9 fputs($file, "$HTTP_USER_AGENT\n"); 10 fclose($file); 11 ?> 12
Note: You might get the idea from the example above to use this technique to write to a remote log, but as mentioned above, you can only write to a new file using the URL fopen() wrappers. To do distributed logging like that, you should take a look at syslog().
153
Chapter 20. Connection handling
Note: The following applies to 3.0.7 and later.
Internally in PHP a connection status is maintained. There are 3 possible states:
• • •
0 - NORMAL 1 - ABORTED 2 - TIMEOUT
When a PHP script is running normally the NORMAL state, is active. If the remote client disconnects the ABORTED state flag is turned on. A remote client disconnect is usually caused by the user hitting his STOP button. If the PHP-imposed time limit (see set_time_limit()) is hit, the TIMEOUT state flag is turned on. You can decide whether or not you want a client disconnect to cause your script to be aborted. Sometimes it is handy to always have your scripts run to completion even if there is no remote browser receiving the output. The default behaviour is however for your script to be aborted when the remote client disconnects. This behaviour can be set via the ignore_user_abort php3.ini directive as well as through the corresponding php3_ignore_user_abort Apache .conf directive or with the ignore_user_abort() function. If you do not tell PHP to ignore a user abort and the user aborts, your script will terminate. The one exception is if you have registered a shutdown function using register_shutdown_function(). With a shutdown function, when the remote user hits his STOP button, the next time your script tries to output something PHP will detect that the connection has been aborted and the shutdown function is called. This shutdown function will also get called at the end of your script terminating normally, so to do something different in case of a client diconnect you can use the connection_aborted() function. This function will return true if the connection was aborted. Your script can also be terminated by the built-in script timer. The default timeout is 30 seconds. It can be changed using the max_execution_time php3.ini directive or the corresponding php3_max_execution_time Apache .conf directive as well as with the set_time_limit() function. When the timer expires the script will be aborted and as with the above client disconnect case, if a shutdown function has been registered it will be called. Within this shutdown function you can check to see if a timeout caused the shutdown function to be called by calling the connection_timeout() function. This function will return true if a timeout caused the shutdown function to be called. One thing to note is that both the ABORTED and the TIMEOUT states can be active at the same time. This is possible if you tell PHP to ignore user aborts. PHP will still note the fact that a user may have broken the connection, but the script will keep running. If it then hits the time limit it will be aborted and your shutdown function, if any, will be called. At this point you will find that connection_timeout() and connection_aborted() return true. You can also check both states in a
154
Chapter 20. Connection handling
single call by using the connection_status(). This function returns a bitfield of the active states. So, if both states are active it would return 3, for example.
155
Chapter 21. Persistent database connections
Persistent connections are SQL links that do not close when the execution of your script ends. When a persistent connection is requested, PHP checks if there’s already an identical persistent connection (that remained open from earlier) - and if it exists, it uses it. If it does not exist, it creates the link. An ’identical’ connection is a connection that was opened to the same host, with the same username and the same password (where applicable). People who aren’t thoroughly familiar with the way web servers work and distribute the load may mistake persistent connects for what they’re not. In particular, they do not give you an ability to open ’user sessions’ on the same SQL link, they do not give you an ability to build up a transaction efficently, and they don’t do a whole lot of other things. In fact, to be extremely clear about the subject, persistent connections don’t give you any functionality that wasn’t possible with their non-persistent brothers. Why? This has to do with the way web servers work. There are three ways in which your web server can utilize PHP to generate web pages. The first method is to use PHP as a CGI "wrapper". When run this way, an instance of the PHP interpreter is created and destroyed for every page request (for a PHP page) to your web server. Because it is destroyed after every request, any resources that it acquires (such as a link to an SQL database server) are closed when it is destroyed. In this case, you do not gain anything from trying to use persistent connections -- they simply don’t persist. The second, and most popular, method is to run PHP as a module in a multiprocess web server, which currently only includes Apache. A multiprocess server typically has one process (the parent) which coordinates a set of processes (its children) who actually do the work of serving up web pages. When each request comes in from a a client, it is handed off to one of the children that is not already serving another client. This means that when the same client makes a second request to the server, it may be serviced by a different child process than the first time. What a persistent connection does for you in this case it make it so each child process only needs to connect to your SQL server the first time that it serves a page that makes us of such a connection. When another page then requires a connection to the SQL server, it can reuse the connection that child established earlier. The last method is to use PHP as a plug-in for a multithreaded web server. Currently this is only theoretical -- PHP does not yet work as a plug-in for any multithreaded web servers. Work is progressing on support for ISAPI, WSAPI, and NSAPI (on Windows), which will all allow PHP to be used as a plug-in on multithreaded servers like Netscape FastTrack, Microsoft’s Internet Information Server (IIS), and O’Reilly’s WebSite Pro. When this happens, the behavior will be essentially the same as for the multiprocess model described before. If persistent connections don’t have any added functionality, what are they good for? The answer here is extremely simple -- efficiency. Persistent connections are good if the overhead to create a link to your SQL server is high. Whether or not this overhead is really high depends on many factors. Like, what kind of database it is, whether or not it sits on the same computer on which
156
Chapter 21. Persistent database connections
your web server sits, how loaded the machine the SQL server sits on is and so forth. The bottom line is that if that connection overhead is high, persistent connections help you considerably. They cause the child process to simply connect only once for its entire lifespan, instead of every time it processes a page that requires connecting to the SQL server. This means that for every child that opened a persistent connection will have its own open persistent connection to the server. For example, if you had 20 different child processes that ran a script that made a persistent connection to your SQL server, you’d have 20 different connections to the SQL server, one from each child. An important summary. Persistent connections were designed to have one-to-one mapping to regular connections. That means that you should always be able to replace persistent connections with non-persistent connections, and it won’t change the way your script behaves. It may (and probably will) change the efficiency of the script, but not its behavior!
157
IV. Function Reference
158
I. Apache-specific Functions
159
apache_lookup_uri (PHP3 >= 3.0.4, PHP4 )
Perform a partial request for the specified URI and return all info about it
class apache_lookup_uri (string filename)
This performs a partial request for a URI. It goes just far enough to obtain all the important information about the given resource and returns this information in a class. The properties of the returned class are: status the_request status_line method content_type handler uri filename path_info args boundary no_cache no_local_copy allowed send_bodyct bytes_sent byterange clength unparsed_uri mtime request_time
Note: Apache_lookup_uri() only works when PHP is installed as an Apache module.
160
Apache
apache_note (PHP3 >= 3.0.2, PHP4 )
Get and set apache request notes
string apache_note (string note_name [, string note_value])
Apache_note() is an Apache-specific function which gets and sets values in a request’s notes table. If called with one argument, it returns the current value of note note_name. If called with two arguments, it sets the value of note note_name to note_value and returns the previous value of note note_name.
getallheaders (PHP3 , PHP4 )
Fetch all HTTP request headers
array getallheaders(void);
This function returns an associative array of all the HTTP headers in the current request.
Note: You can also get at the value of the common CGI variables by reading them from the environment, which works whether or not you are using PHP as an Apache module. Use phpinfo() to see a list of all of the environment variables defined this way.
Example 1. getallheaders() Example
1 2 $headers = getallheaders(); 3 while (list ($header, $value) = each ($headers)) { 4 echo "$header: $value
\n"; 5 } 6
This example will display all the request headers for the current request.
Note: Getallheaders() is currently only supported when PHP runs as an Apache module.
161
Apache
virtual (PHP3 , PHP4 )
Perform an Apache sub-request
int virtual (string filename)
Virtual() is an Apache-specific function which is equivalent to in mod_include. It performs an Apache sub-request. It is useful for including CGI scripts or .shtml files, or anything else that you would parse through Apache. Note that for a CGI script, the script must generate valid CGI headers. At the minimum that means it must generate a Content-type header. For PHP files, you need to use include() or require(); virtual() cannot be used to include a document which is itself a PHP file.
162
II. Arbitrary precision mathematics functions
These functions are only available if PHP was configured with --enable-bcmath.
163
bcadd (PHP3 , PHP4 )
Add two arbitrary precision numbers.
string bcadd (string left operand, string right operand [, int scale])
Adds the left operand to the right operand and returns the sum in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result. See also bcsub().
bccomp (PHP3 , PHP4 )
Compare two arbitrary precision numbers.
int bccomp (string left operand, string right operand [, int scale])
Compares the left operand to the right operand and returns the result as an integer. The optional scale parameter is used to set the number of digits after the decimal place which will be used in the comparion. The return value is 0 if the two operands are equal. If the left operand is larger than the right operand the return value is +1 and if the left operand is less than the right operand the return value is -1.
bcdiv (PHP3 , PHP4 )
Divide two arbitrary precision numbers.
string bcdiv (string left operand, string right operand [, int scale])
Divides the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result. See also bcmul().
164
BC math
bcmod (PHP3 , PHP4 )
Get modulus of an arbitrary precision number.
string bcmod (string left operand, string modulus)
Get the modulus of the left operand using modulus. See also bcdiv().
bcmul (PHP3 , PHP4 )
Multiply two arbitrary precision number.
string bcmul (string left operand, string right operand [, int scale])
Multiply the left operand by the right operand and returns the result. The optional scale sets the number of digits after the decimal place in the result. See also bcdiv().
bcpow (PHP3 , PHP4 )
Raise an arbitrary precision number to another.
string bcpow (string x, string y [, int scale])
Raise x to the power y. The optional scale can be used to set the number of digits after the decimal place in the result. See also bcsqrt().
bcscale (PHP3 , PHP4 )
Set default scale parameter for all bc math functions.
165
BC math
string bcscale (int scale)
This function sets the default scale parameter for all subsequent bc math functions that do not explicitly specify a scale parameter.
bcsqrt (PHP3 , PHP4 )
Get the square root of an arbitray precision number.
string bcsqrt (string operand, int scale)
Return the square root of the operand. The optional scale parameter sets the number of digits after the decimal place in the result. See also bcpow().
bcsub (PHP3 , PHP4 )
Subtract one arbitrary precision number from another.
string bcsub (string left operand, string right operand [, int scale])
Subtracts the right operand from the left operand and returns the result in a string. The optional scale parameter is used to set the number of digits after the decimal place in the result. See also bcadd().
166
III. Array functions
167
array (unknown)
Create an array
array array(...);
Returns an array of the parameters. The parameters can be given an index with the => operator.
Note: array() is a language construct used to represent literal arrays, and not a regular function.
The following example demonstrates how to create a two-dimensional array, how to specify keys for associative arrays, and how to skip-and-continue numeric indices in normal arrays. Example 1. array() example
1 2 $fruits = array ( 3 "fruits" => array("a"=>"orange", "b"=>"banana", "c"=>"apple"), 4 "numbers" => array(1, 2, 3, 4, 5, 6), 5 "holes" => array("first", 5 => "second", "third") 6 ); 7
See also: list().
array_count_values (PHP4 >= 4.0b4)
Counts all the values of an array
array array_count_values (array input)
array_count_values() returns an array using the values of the input array as keys and their frequency in input as values. Example 1. array_count_values() example
1 2 $array = array(1, "hello", 1, "world", "hello"); 3 array_count_values($array); // returns ar-
ray(1=>2, "hello"=>2, "world"=>1)
4
168
Arrays
Note: This function was added in PHP 4.0.
array_flip (PHP4 >= 4.0b4)
Flip all the values of an array
array array_flip (array trans)
array_flip() returns an array in flip order. Example 1. array_flip() example
1 2 $trans = array_flip ($trans); 3 $original = strtr ($str, $trans); 4
Note: This function was added in PHP 4.0.
array_keys (PHP4 )
Return all the keys of an array
array array_keys (array input [, mixed search_value])
array_keys() returns the keys, numeric and string, from the input array. If the optional search_value is specified, then only the keys for that value are returned. Otherwise, all the keys from the input are returned. Example 1. array_keys() example
1 2 $array = array(0 => 100, "color" => "red"); 3 array_keys ($array); // returns array (0, "color") 4 5 $array = array(1, 100, 2, 100);
169
Arrays
6 array_keys ($array, 100); 7
//
returns array (0, 2)
See also array_values().
Note: This function was added in PHP 4.0.
array_merge (PHP4 )
Merge two or more arrays
array array_merge (array array1, array array2 [, ...])
array_merge() merges the elements of two or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays had the same string keys, then the later value for that key will overwrite previous one. If, however, the arrays have the same numeric key, this does not happen since the values are appended. Example 1. array_merge() example
1 2 $array1 = array ("color" => "red", 2, 4); 3 $array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid"); 4 array_merge ($array1, $array2); 5
Resulting array will be array("color" => "green", 2, 4, "a", "b", "shape" => "trapezoid").
Note: This function was added in PHP 4.0.
array_pad (PHP4 >= 4.0b4)
Pad array to the specified length with a value
array array_pad (array input, int pad_size, mixed pad_value)
170
Arrays
array_pad() returns a copy of the input padded to size specified by pad_size with value pad_value. If pad_size is positive then the array is padded on the right, if it’s negative then on the left. If the absolute value of pad_size is less than or equal to the length of the input then no padding takes place. Example 1. array_pad() example
1 2 3 4 5 6 7 8 9 10 11 12
$input = array (12, 10, 9); $result = array_pad ($input, 5, 0); // result is array (12, 10, 9, 0, 0) $result = array_pad ($input, -7, -1); // result is array (-1, -1, -1, -1, 12, 10, 9) $result = array_pad ($input, 2, "noop"); // not padded
array_pop (PHP4 )
Pop the element off the end of array
mixed array_pop (array array)
array_pop() pops and returns the last value of the array, shortening the array by one element. Example 1. array_pop() example
1 2 $stack = array ("orange", "apple", "raspberry"); 3 $fruit = array_pop ($stack); 4
After this, $stack has only 2 elements: "orange" and "apple", and $fruit has "raspberry". See also array_push(), array_shift(), and array_unshift().
Note: This function was added in PHP 4.0.
171
Arrays
array_push (PHP4 )
Push one or more elements onto the end of array
int array_push (array array, mixed var [, ...])
array_push() treats array as a stack, and pushes the passed variables onto the end of array. The length of array increases by the number of variables pushed. Has the same effect as:
1 2 $array[] = $var; 3
repeated for each var. Returns the new number of elements in the array. Example 1. array_push() example
1 2 $stack = array (1, 2); 3 array_push($stack, "+", 3); 4
This example would result in $stack having 4 elements: 1, 2, "+", and 3. See also: array_pop(), array_shift(), and array_unshift().
Note: This function was added in PHP 4.0.
array_reverse (PHP4 >= 4.0b4)
Return an array with elements in reverse order
array array_reverse (array array)
array_reverse() takes input array and returns a new array with the order of the elements reversed. Example 1. array_reverse() example
1
172
Arrays
2 $input = array ("php", 4.0, array ("green", "red")); 3 $result = array_reverse ($input); 4
This makes $result have array (array ("green", "red"), 4.0, "php").
Note: This function was added in PHP 4.0 Beta 3.
array_shift (PHP4 )
Pop an element off the beginning of array
mixed array_shift (array array)
array_shift() shifts the first value of the array off and returns it, shortening the array by one element and moving everything down. Example 1. array_shift() example
1 2 $args = array ("-v", "-f"); 3 $opt = array_shift ($args); 4
This would result in $args having one element "-f" left, and $opt being "-v". See also array_unshift(), array_push(), and array_pop().
Note: This function was added in PHP 4.0.
array_slice (PHP4 )
Extract a slice of the array
array array_slice (array array, int offset [, int length])
173
Arrays
array_slice() returns a sequence of elements from the array specified by the offset and length parameters. If offset is positive, the sequence will start at that offset in the array. If offset is negative, the sequence will start that far from the end of the array. If length is given and is positive, then the sequence will have that many elements in it. If length is given and is negative then the sequence will stop that many elements from the end of the array. If it is omitted, then the sequence will have everything from offset up until the end of the array. Example 1. array_slice() examples
1 2 3 4 5 6 7 8
$input = array ("a", "b", "c", "d", "e"); $output $output $output $output = = = = array_slice array_slice array_slice array_slice ($input, ($input, ($input, ($input, 2); 2, -1); -2, 1); 0, 3); // // // // returns returns returns returns "c", "d", and "e" "c", "d" "d" "a", "b", and "c"
See also array_splice().
Note: This function was added in PHP 4.0.
array_splice (PHP4 )
Remove a portion of the array and replace it with something else
array array_splice (array input, int offset [, int length [, array replacement]])
array_splice() removes the elements designated by offset and length from the input array, and replaces them with the elements of the replacement array, if supplied. If offset is positive then the start of removed portion is at that offset from the beginning of the input array. If offset is negative then it starts that far from the end of the input array. If length is omitted, removes everything from offset to the end of the array. If length is specified and is positive, then that many elements will be removed. If length is specified and is negative then the end of the removed portion will be that many elements from the end of the array. Tip: to remove everything from offset to the end of the array when replacement is also specified, use count($input) for length.
174
Arrays
If replacement array is specified, then the removed elements are replaced with elements from this array. If offset and length are such that nothing is removed, then the elements from the replacement array are inserted in the place specified by the offset. Tip: if the replacement is just one element it is not necessary to put array() around it, unless the element is an array itself. The following equivalences hold:
1 2 array_push($input, $x, $y)
ray_splice($input, count($input), 3 array_pop($input) 4 array_shift($input) 5 array_unshift($input, $x, $y) ray($x, $y)) 6 $a[$x] = $y
7
ar0, array($x, $y)) array_splice($input, -1) array_splice($input, 0, 1) array_splice($input, 0, 0, ararray_splice($input, $x, 1, $y)
Returns the array consisting of removed elements. Example 1. array_splice() examples
1 2 3 4 5 6 7 8 9 10 11
$input = array("red", "green", "blue", "yellow"); array_splice($input, 2); // $input is now array("red", "green") array_splice($input, 1, -1); // $input is now array("red", "yellow") array_splice($input, 1, count($input), "orange"); // $input is now array("red", "orange") array_splice($input, -1, 1, array("black", "maroon")); // $input is now array("red", "green", // "blue", "black", "maroon")
See also array_slice().
Note: This function was added in PHP 4.0.
array_unshift (PHP4 )
Push one or more elements onto the beginning of array
int array_unshift (array array, mixed var [, ...])
175
Arrays
array_unshift() prepends passed elements to the front of the array. Note that the list of elements is prepended as a whole, so that the prepended elements stay in the same order. Returns the new number of elements in the array. Example 1. array_unshift() example
1 2 $queue = array("p1", "p3"); 3 array_unshift($queue, "p4", "p5", "p6"); 4
This would result in $queue having 5 elements: "p4", "p5", "p6", "p1", and "p3". See also array_shift(), array_push(), and array_pop().
Note: This function was added in PHP 4.0.
array_values (PHP4 )
Return all the values of an array
array array_values (array input)
array_values() returns all the values from the input array. Example 1. array_values() example
1 2 $array = array("size" => "XL", "color" => "gold"); 3 array_values($array); // returns array("XL", "gold") 4
Note: This function was added in PHP 4.0.
array_walk (PHP3 >= 3.0.3, PHP4 )
Apply a user function to every member of an array.
176
Arrays
int array_walk (array arr, string func, mixed userdata)
Applies the function named by func to each element of arr. func will be passed array value as the first parameter and array key as the second parameter. If userdata is supplied, it will be passed as the third parameter to the user function. If func requires more than two or three arguments, depending on userdata, a warning will be generated each time array_walk() calls func. These warnings may be suppressed by prepending the ’@’ sign to the array_walk() call, or by using error_reporting().
Note: If func needs to be working with the actual values of the array, specify that the first parameter of func should be passed by reference. Then any changes made to those elements will be made in the array itself.
Note: Passing the key and userdata to func was added in 4.0. In PHP 4 reset() needs to be called as necessary since array_walk() does not reset the array by default.
Example 1. array_walk() example
1 2 $fruits = ar-
ray ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
function test_alter (&$item1, $key, $prefix) { $item1 = "$prefix: $item1"; } function test_print ($item2, $key) { echo "$key. $item2
\n"; } array_walk ($fruits, ’test_print’); reset ($fruits); array_walk ($fruits, ’test_alter’, ’fruit’); reset ($fruits); array_walk ($fruits, ’test_print’);
See also each() and list().
177
Arrays
arsort (PHP3 , PHP4 )
Sort an array in reverse order and maintain index association
void arsort (array array)
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. Example 1. arsort() example
1 2 $fruits = ar-
ray ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 3 arsort ($fruits); 4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) { 5 echo "fruits[$key] = ".$fruits[$key]."\n"; 6 }
7
This example would display: fruits[a] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple The fruits have been sorted in reverse alphabetical order, and the index associated with each element has been maintained. See also: asort(), rsort(), ksort(), and sort().
asort (PHP3 , PHP4 )
Sort an array and maintain index association
void asort (array array)
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. Example 1. asort() example
1 2 $fruits = ar-
ray ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 3 asort ($fruits);
178
Arrays
4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) { 5 echo "fruits[$key] = ".$fruits[$key]."\n"; 6 } 7
This example would display: fruits[c] = apple fruits[b] = banana fruits[d] = lemon fruits[a] = orange The fruits have been sorted in alphabetical order, and the index associated with each element has been maintained. See also arsort(), rsort(), ksort(), and sort().
compact (PHP4 )
Create array containing variables and their values
array compact (string varname | array varnames [, ...])
compact() takes a variable number of parameters. Each parameter can be either a string containing the name of the variable, or an array of variable names. The array can contain other arrays of variable names inside it; compact() handles it recursively. For each of these, compact() looks for a variable with that name in the current symbol table and adds it to the output array such that the variable name becomes the key and the contents of the variable become the value for that key. In short, it does the opposite of extract(). It returns the output array with all the variables added to it. Example 1. compact() example
1 2 3 4 5 6 7 8 9
$city = "San Francisco"; $state = "CA"; $event = "SIGGRAPH"; $location_vars = array ("city", "state"); $result = compact ("event", $location_vars);
After this, $result will be array ("event" => "SIGGRAPH", "city" => "San Francisco", "state" => "CA"). See also extract().
Note: This function was added in PHP 4.0.
179
Arrays
count (PHP3 , PHP4 )
count elements in a variable
int count (mixed var)
Returns the number of elements in var, which is typically an array (since anything else will have one element). Returns 1 if the variable is not an array. Returns 0 if the variable is not set.
Warning
count() may return 0 for a variable that isn’t set, but it may also return 0 for a variable that has been initialized with an empty array. Use isset() to test if a variable is set.
See also: sizeof(), isset(), and is_array().
current (PHP3 , PHP4 )
Return the current element in an array
mixed current (array array)
Every array has an internal pointer to its "current" element, which is initialized to the first element inserted into the array. The current() function simply returns the array element that’s currently being pointed by the internal pointer. It does not move the pointer in any way. If the internal pointer points beyond the end of the elements list, current() returns false.
Warning
If the array contains empty elements (0 or "", the empty string) then this function will return false for these elements as well. This makes it impossible to determine if you are really at the end of the list in such an array using current(). To properly traverse an array that may contain empty elements, use the each() function.
180
Arrays
See also: end(), next(), prev() and reset().
each (PHP3 , PHP4 )
Return the next key and value pair from an array
array each (array array)
Returns the current key and value pair from the array array and advances the array cursor. This pair is returned in a four-element array, with the keys 0, 1, key, and value. Elements 0 and key contain the key name of the array element, and 1 and value contain the data. If the internal pointer for the array points past the end of the array contents, each() returns false. Example 1. each() examples
1 2 $foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese"); 3 $bar = each ($foo); 4
$bar now contains the following key/value pairs:
• • • •
0 => 0 1 => ’bob’ key => 0 value => ’bob’
1 2 $foo = array ("Robert" => "Bob", "Seppo" => "Sepi"); 3 $bar = each ($foo); 4
$bar now contains the following key/value pairs:
• • • •
0 => ’Robert’ 1 => ’Bob’ key => ’Robert’ value => ’Bob’
each() is typically used in conjunction with list() to traverse an array; for instance, $HTTP_POST_VARS:
181
Arrays
Example 2. Traversing $HTTP_POST_VARS with each()
1 2 3 4 5 6 7
echo "Values submitted via POST method:
"; reset ($HTTP_POST_VARS); while (list ($key, $val) = each ($HTTP_POST_VARS)) { echo "$key => $val
"; }
After each() has executed, the array cursor will be left on the next element of the array, or on the last element if it hits the end of the array. See also key(), list(), current(), reset(), next(), and prev().
end (PHP3 , PHP4 )
Set the internal pointer of an array to its last element
end (array array)
end() advances array’s internal pointer to the last element. See also: current(), each(), end(), next(), and reset().
extract (PHP3 >= 3.0.7, PHP4 )
Import variables into the symbol table from an array
void extract (array var_array [, int extract_type [, string prefix]])
This function is used to import variables from an array into the current symbol table. It takes associative array var_array and treats keys as variable names and values as variable values. For each key/value pair it will create a variable in the current symbol table, subject to extract_type and prefix parameters. extract() checks for colissions with existing variables. The way collisions are treated is determined by extract_type. It can be one of the following values:
182
Arrays
EXTR_OVERWRITE If there is a collision, overwrite the existing variable. EXTR_SKIP If there is a collision, don’t overwrite the existing variable. EXTR_PREFIX_SAME If there is a collision, prefix the new variable with prefix. EXTR_PREFIX_ALL Prefix all variables with prefix. If extract_type is not specified, it is assumed to be EXTR_OVERWRITE. Note that prefix is only required if extract_type is EXTR_PREFIX_SAME or EXTR_PREFIX_ALL. extract() checks each key to see if it constitues a valid variable name, and if it does only then does it proceed to import it. A possible use for extract is to import into symbol table variables contained in an associative array returned by wddx_deserialize(). Example 1. Extract() example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
"blue", "size" => "medium", "shape" => "sphere"); extract ($var_array, EXTR_PREFIX_SAME, "wddx"); print "$color, $size, $shape, $wddx_size\n"; ?>
The above example will produce:
1 2 blue, large, sphere, medium 3
183
Arrays
The $size wasn’t overwritten, becaus we specified EXTR_PREFIX_SAME, which resulted in $wddx_size being created. If EXTR_SKIP was specified, then $wddx_size wouldn’t even have been created. EXTR_OVERWRITE would have cause $size to have value "medium", and EXTR_PREFIX_ALL would result in new variables being named $wddx_color, $wddx_size, and $wddx_shape.
in_array (PHP4 )
Return true if a value exists in an array
bool in_array (mixed needle, array haystack)
Searches haystack for needle and returns true if it is found in the array, false otherwise. Example 1. in_array() example
1 2 $os = array ("Mac", "NT", "Irix", "Linux"); 3 if (in_array ("Irix", $os)) 4 print "Got Irix"; 5
Note: This function was added in PHP 4.0.
key (PHP3 , PHP4 )
Fetch a key from an associative array
mixed key (array array)
key() returns the index element of the current array position. See also: current(), next()
184
Arrays
krsort (PHP3 >= 3.0.13, PHP4 >= 4.0b4)
Sort an array by key in reverse order
int krsort (array array)
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays. Example 1. krsort() example
1 2 $fruits = ar-
ray ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 3 krsort ($fruits); 4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) { 5 echo "fruits[$key] = ".$fruits[$key]."\n"; 6 }
7
This example would display: fruits[d] = lemon fruits[c] = apple fruits[b] =
banana fruits[a] = orange
See also asort(), arsort(), ksort() sort(), and rsort().
ksort (PHP3 , PHP4 )
Sort an array by key
int ksort (array array)
Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays. Example 1. ksort() example
1 2 $fruits = ar-
ray ("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); 3 ksort ($fruits); 4 for (reset ($fruits); $key = key ($fruits); next ($fruits)) { 5 echo "fruits[$key] = ".$fruits[$key]."\n"; 6 }
185
Arrays
7
This example would display: fruits[a] = orange fruits[b] = banana fruits[c] =
apple fruits[d] = lemon
See also asort(), arsort(), sort(), and rsort().
list (unknown)
Assign variables as if they were an array
void list(...);
Like array(), this is not really a function, but a language construct. list() is used to assign a list of variables in one operation. Example 1. list() example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Employee name | Salary |
\n". " $name | \n". " $salary | \n". " \n"); } ?>
See also: each(), array().
186
Arrays
next (PHP3 , PHP4 )
Advance the internal array pointer of an array
mixed next (array array)
Returns the array element in the next place that’s pointed by the internal array pointer, or false if there are no more elements. next() behaves like current(), with one difference. It advances the internal array pointer one place forward before returning the element. That means it returns the next array element and advances the internal array pointer by one. If advancing the internal array pointer results in going beyond the end of the element list, next() returns false.
Warning
If the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.
See also: current(), end() prev() and reset()
pos (PHP3 , PHP4 )
Get the current element from an array
mixed pos (array array)
This is an alias for current(). See also: end(), next(), prev() and reset().
prev (PHP3 , PHP4 )
Rewind the internal array pointer
mixed prev (array array)
187
Arrays
Returns the array element in the previous place that’s pointed by the internal array pointer, or false if there are no more elements.
Warning
If the array contains empty elements then this function will return false for these elements as well. To properly traverse an array which may contain empty elements see the each() function.
prev() behaves just like next(), except it rewinds the internal array pointer one place instead of advancing it. See also: current(), end() next() and reset()
range (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Create an array containing a range of integers
array range (int low, int high)
range() returns an array of integers from low to high, inclusive. See shuffle() for an example of its use.
reset (PHP3 , PHP4 )
Set the internal pointer of an array to its first element
mixed reset (array array)
reset() rewinds array’s internal pointer to the first element. reset() returns the value of the first array element. See also: current(), each(), next(), prev(), and reset().
rsort (PHP3 , PHP4 )
Sort an array in reverse order
188
Arrays
void rsort (array array)
This function sorts an array in reverse order (highest to lowest). Example 1. rsort() example
1 2 3 4 5 6 7
$fruits = array ("lemon", "orange", "banana", "apple"); rsort ($fruits); for (reset ($fruits); list ($key, $value) = each ($fruits); ) { echo "fruits[$key] = ", $value, "\n"; }
This example would display: fruits[0] = orange fruits[1] = lemon fruits[2] = banana fruits[3] = apple The fruits have been sorted in reverse alphabetical order. See also: arsort(), asort(), ksort(), sort(), and usort().
shuffle (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Shuffle an array
void shuffle (array array)
This function shuffles (randomizes the order of the elements in) an array. Example 1. shuffle() example
1 2 3 4 5 6 7 8
$numbers = range (1,20); srand (time()); shuffle ($numbers); while (list(, $number) = each ($numbers)) { echo "$number "; }
See also arsort(), asort(), ksort(), rsort(), sort() and usort().
189
Arrays
sizeof (PHP3 , PHP4 )
Get the number of elements in an array
int sizeof (array array)
Returns the number of elements in the array. See also: count()
sort (PHP3 , PHP4 )
Sort an array
void sort (array array)
This function sorts an array. Elements will be arranged from lowest to highest when this function has completed. Example 1. sort() example
1 2 3 4 5 6 7
$fruits = array ("lemon", "orange", "banana", "apple"); sort ($fruits); for (reset ($fruits); $key = key ($fruits); next ($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
This example would display: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange The fruits have been sorted in alphabetical order. See also: arsort(), asort(), ksort(), rsort(), and usort().
uasort (PHP3 >= 3.0.4, PHP4 )
Sort an array with a user-defined comparison function and maintain index association
void uasort (array array, function cmp_function)
190
Arrays
This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant. The comparison function is user-defined.
uksort (PHP3 >= 3.0.4, PHP4 )
Sort an array by keys using a user-defined comparison function
void uksort (array array, function cmp_function)
This function will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function. Example 1. uksort() example
1 2 3 4 5 6 7 8 9 10 11
function mycompare ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array (4 => "four", 3 => "three", 20 => "twenty", 10 => "ten"); uksort ($a, mycompare); while (list ($key, $value) = each ($a)) { echo "$key: $value\n"; }
This example would display: 20: twenty 10: ten 4: four 3: three See also: arsort(), asort(), uasort(), ksort(), rsort(), and sort().
usort (PHP3 >= 3.0.3, PHP4 )
Sort an array by values using a user-defined comparison function
void usort (array array, function cmp_function)
This function will sort an array by its values using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.
191
Arrays
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. If two members compare as equal, their order in the sorted array is undefined. Example 1. usort() example
1 2 3 4 5 6 7 8 9 10 11
function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array (3, 2, 5, 6, 1); usort ($a, cmp); while (list ($key, $value) = each ($a)) { echo "$key: $value\n"; }
This example would display: 0: 6 1: 5 2: 3 3: 2 4: 1
Note: Obviously in this trivial case the rsort() function would be more appropriate.
Warning
The underlying quicksort function in some C libraries (such as on Solaris systems) may cause PHP to crash if the comparison function does not return consistent values.
See also: arsort(), asort(), ksort(), rsort() and sort().
192
IV. Aspell functions
The aspell() functions allows you to check the spelling on a word and offer suggestions. You need the aspell library, available from: http:/metalab.unc.edu/kevina/aspell/.
193
aspell_new (PHP3 >= 3.0.7, PHP4 )
Load a new dictionary
int aspell_new (string master, string personal)
Aspell_new() opens up a new dictionary and returns the dictionary link identifier for use in other aspell functions. Example 1. Aspell_new()
1 2 $aspell_link=aspell_new ("english"); 3
aspell_check (PHP3 >= 3.0.7, PHP4 )
Check a word
boolean aspell_check (int dictionary_link, string word)
Aspell_check() checks the spelling of a word and returns true if the spelling is correct, false if not. Example 1. Aspell_check()
1 2 3 4 5 6 7 8
$aspell_link=aspell_new ("english"); if (aspell_check ($aspell_link,"testt")) { echo "This is a valid spelling"; } else { echo "Sorry, wrong spelling"; }
aspell_check-raw (unknown)
Check a word without changing its case or trying to trim it
194
Aspell
boolean aspell_check_raw (int dictionary_link, string word)
Aspell_check_raw() checks the spelling of a word, without changing its case or trying to trim it in any way and returns true if the spelling is correct, false if not. Example 1. Aspell_check_raw()
1 2 3 4 5 6 7 8
$aspell_link=aspell_new ("english"); if (aspell_check_raw ($aspell_link, "test")) { echo "This is a valid spelling"; } else { echo "Sorry, wrong spelling"; }
aspell_suggest (PHP3 >= 3.0.7, PHP4 )
Suggest spellings of a word
array aspell_suggest (int dictionary_link, string word)
Aspell_suggest() returns an array of possible spellings for the given word. Example 1. Aspell_suggest()
1 2 $aspell_link=aspell_new ("english"); 3 4 if (!aspell_check ($aspell_link, "test")) { 5 $suggestions=aspell_suggest ($aspell_link, "test"); 6 7 for ($i=0; $i < count ($suggestions); $i++) { 8 echo "Possible spelling: " . $suggestions[$i] . "
"; 9 } 10 } 11
195
V. Calendar functions
The calendar functions are only available if you have compiled the calendar extension in dl/calendar. Read dl/README for instructions on using it. The calendar extension presents a series of functions to simplify converting between different calendar formats. The intermediary or standard it is based on is the Julian Day Count. The Julian Day Count is a count of days starting way earlier than any date most people would need to track (somewhere around 4000bc). To convert between calendar systems, you must first convert to Julian Day Count, then to the calendar system of your choice. Julian Day Count is very different from the Julian Calendar! For more information on calendar systems visit http://genealogy.org/~scottlee/cal-overview.html. Excerpts from this page are included in these instructions, and are in quotes.
196
JDToGregorian (unknown)
Converts Julian Day Count to Gregorian date
string jdtogregorian (int julianday)
Converts Julian Day Count to a string containing the Gregorian date in the format of "month/day/year".
GregorianToJD (unknown)
Converts a Gregorian date to Julian Day Count
int gregoriantojd (int month, int day, int year)
Valid Range for Gregorian Calendar 4714 B.C. to 9999 A.D. Although this software can handle dates all the way back to 4714 B.C., such use may not be meaningful. The Gregorian calendar was not instituted until October 15, 1582 (or October 5, 1582 in the Julian calendar). Some countries did not accept it until much later. For example, Britain converted in 1752, The USSR in 1918 and Greece in 1923. Most European countries used the Julian calendar prior to the Gregorian. Example 1. Calendar functions
1 2 3 4 5 6 7 8
JDToJulian (unknown)
Converts a Julian Calendar date to Julian Day Count
197
Calendar
string jdtojulian (int julianday)
Converts Julian Day Count to a string containing the Julian Calendar Date in the format of "month/day/year".
JulianToJD (unknown)
Converts a Julian Calendar date to Julian Day Count
int juliantojd (int month, int day, int year)
Valid Range for Julian Calendar 4713 B.C. to 9999 A.D. Although this software can handle dates all the way back to 4713 B.C., such use may not be meaningful. The calendar was created in 46 B.C., but the details did not stabilize until at least 8 A.D., and perhaps as late at the 4th century. Also, the beginning of a year varied from one culture to another - not all accepted January as the first month.
JDToJewish (unknown)
Converts a Julian Day Count to the Jewish Calendar
string jdtojewish (int julianday)
Converts a Julian Day Count the the Jewish Calendar.
JewishToJD (unknown)
Converts a date in the Jewish Calendar to Julian Day Count
int jewishtojd (int month, int day, int year)
Valid Range Although this software can handle dates all the way back to the year 1 (3761 B.C.), such use may not be meaningful.
198
Calendar
The Jewish calendar has been in use for several thousand years, but in the early days there was no formula to determine the start of a month. A new month was started when the new moon was first observed.
JDToFrench (unknown)
Converts a Julian Day Count to the French Republican Calendar
string jdtofrench (int month, int day, int year)
Converts a Julian Day Count to the French Republican Calendar.
FrenchToJD (unknown)
Converts a date from the French Republican Calendar to a Julian Day Count
int frenchtojd (int month, int day, int year)
Converts a date from the French Republican Calendar to a Julian Day Count. These routines only convert dates in years 1 through 14 (Gregorian dates 22 September 1792 through 22 September 1806). This more than covers the period when the calendar was in use.
JDMonthName (unknown)
Returns a month name
string jdmonthname (int julianday, int mode)
Returns a string containing a month name. mode tells this function which calendar to convert the Julian Day Count to, and what type of month names are to be returned. Table 1. Calendar modes Mode 0 Meaning Gregorian - abbreviated
199
Calendar
Mode 1 2 3 4 5
Meaning Gregorian Julian - abbreviated Julian Jewish French Republican
JDDayOfWeek (unknown)
Returns the day of the week
mixed jddayofweek (int julianday, int mode)
Returns the day of the week. Can return a string or an int depending on the mode. Table 1. Calendar week modes Mode 0 1 2 Meaning Returns the day number as an int (0=sunday, 1=monday, etc) Returns string containing the day of week (english-gregorian) Returns a string containing the abbreviated day of week (english-gregorian)
easter_date (PHP3 >= 3.0.9, PHP4 >= 4.0RC2)
Get UNIX timestamp for midnight on Easter of a given year
int easter_date (int year)
Returns the UNIX timestamp corresponding to midnight on Easter of the given year. If no year is specified, the current year is assumed. Warning: This function will generate a warning if the year is outside of the range for UNIX timestamps (i.e. before 1970 or after 2037).
200
Calendar
Example 1. easter_date() example
1 2 echo date ("M-d-Y", easter_date(1999)); 3 echo date ("M-d-Y", easter_date(2000)); 4 echo date ("M-d-Y", easter_date(2001)); 5
/* "Apr-04-1999" */ /* "Apr-23-2000" */ /* "Apr-15-2001" */
The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate. (The code is based on a C program by Simon Kershaw, ) See easter_days() for calculating Easter before 1970 or after 2037.
easter_days (PHP3 >= 3.0.9, PHP4 >= 4.0RC2)
Get number of days after March 21 on which Easter falls for a given year
int easter_days (int year)
Returns the number of days after March 21 on which Easter falls for a given year. If no year is specified, the current year is assumed. This function can be used instead of easter_date() to calculate Easter for years which fall outside the range of UNIX timestamps (i.e. before 1970 or after 2037). Example 1. Easter_date() example
1 2 echo easter_days (1999); 3 echo easter_days (1492); 4 echo easter_days (1913); 5
/* 14, i.e. April 4 /* 32, i.e. April 22 /* 2, i.e. March 23
*/ */ */
The date of Easter Day was defined by the Council of Nicaea in AD325 as the Sunday after the first full moon which falls on or after the Spring Equinox. The Equinox is assumed to always fall on 21st March, so the calculation reduces to determining the date of the full moon and the date of the
201
Calendar
following Sunday. The algorithm used here was introduced around the year 532 by Dionysius Exiguus. Under the Julian Calendar (for years before 1753) a simple 19-year cycle is used to track the phases of the Moon. Under the Gregorian Calendar (for years after 1753 - devised by Clavius and Lilius, and introduced by Pope Gregory XIII in October 1582, and into Britain and its then colonies in September 1752) two correction factors are added to make the cycle more accurate. (The code is based on a C program by Simon Kershaw, ) See also easter_date().
unixtojd (PHP4 >= 4.0RC2)
Convert UNIX timestamp to Julian Day
int unixtojd ([int timestamp])
Return the Julian Day for a UNIX timestamp (seconds since 1.1.1970), or for the current day if no timestamp is given. See also jdtounix().
Note: This function is only available in PHP versions after PHP4RC1.
jdtounix (PHP4 >= 4.0RC2)
Convert Julian Day to UNIX timestamp
int jdtounix (int jday)
This function will return a UNIX timestamp corresponding to the Julian Day given in jday or false if jday is not inside the UNIX epoch (Gregorian years between 1970 and 2037 or 2440588 <= jday <= 2465342 ) See also jdtounix().
Note: This function is only available in PHP versions after PHP4RC1.
202
VI. COM support functions for Windows
These functions are only available on the Windows version of PHP. These functions have been added in PHP4.
203
com_load (PHP3 >= 3.0.3, PHP4 )
???
string com_load (string module name [, string server name])
com_invoke (PHP3 >= 3.0.3, PHP4 )
???
mixed com_invoke (resource object, string function_name [, mixed function parameters, ...])
com_propget (PHP3 >= 3.0.3, PHP4 )
???
mixed com_propget (resource object, string property)
com_get (PHP3 >= 3.0.3, PHP4 )
???
mixed com_get (resource object, string property)
com_propput (PHP3 >= 3.0.3, PHP4 )
???
204
COM
void com_propput (resource object, string property, mixed value)
com_propset (PHP3 >= 3.0.3, PHP4 )
???
void com_propset (resource object, string property, mixed value)
This function is an alias for com_propput().
com_set (PHP3 >= 3.0.3, PHP4 )
???
void com_set (resource object, string property, mixed value)
This function is an alias for com_set().
205
VII. Class/Object Functions
206
get_class_methods (PHP4 >= 4.0RC1)
Returns an array of class methods’ names
array get_class_methods (string class_name)
This function returns an array of method names defined for the class specified by class_name.
get_class_vars (PHP4 >= 4.0RC1)
Returns an array of default properties of the class
array get_class_vars (string class_name)
This function will return an array of default properties of the class.
get_object_vars (PHP4 >= 4.0RC1)
Returns an array of object properties
array get_class_vars (object obj)
This function returns an array of object properties for the specified object obj.
method_exists (PHP4 >= 4.0b2)
Checks if the class method exists
bool method_exists (object object, string method_name)
This function returns true if the method given by method_name has been defined for the given object, false otherwise.
207
VIII. ClibPDF functions
ClibPDF lets you create PDF documents with PHP. It is available at FastIO (http://www.fastio.com/) but it isn’t free software. You should definitely read the licence before you start playing with ClibPDF. If you cannot fullfil the licence agreement consider using pdflib by Thomas Merz, which is also very powerful. ClibPDF functionality and API is similar to Thomas Merz’s pdflib but, according to FastIO, ClibPDF is faster and creates smaller documents. This may have changed with the new version 2.0 of pdflib. A simple benchmark (the pdfclock.c example from pdflib 2.0 turned into a php script) actually shows no difference in speed at all. The file size is also similar if compression is turned off. So, try them both and see which one does the job for you. This documentation should be read alongside the ClibPDF manual since it explains the library in much greater detail. Many functions in the native ClibPDF and the PHP module, as well as in pdflib, have the same name. All functions except for cpdf_open() take the handle for the document as their first parameter. Currently this handle is not used internally since ClibPDF does not support the creation of several PDF documents at the same time. Actually, you should not even try it, the results are unpredictable. I can’t oversee what the consequences in a multi threaded environment are. According to the author of ClibPDF this will change in one of the next releases (current version when this was written is 1.10). If you need this functionality use the pdflib module.
Note: The function cpdf_set_font() has changed since PHP3 to support asian fonts. The encoding parameter is no longer an integer but a string.
One big advantage of ClibPDF over pdflib is the possibility to create the pdf document completely in memory without using temporary files. It also provides the ability to pass coordinates in a predefined unit length. This is a handy feature but can be simulated with pdf_translate(). Most of the functions are fairly easy to use. The most difficult part is probably creating a very simple PDF document at all. The following example should help you get started. It creates a document with one page. The page contains the text "Times-Roman" in an outlined 30pt font. The text is underlined. Example 1. Simple ClibPDF Example
1 2 3 4 5 6 7 8 9 10 11 12
The pdflib distribution contains a more complex example which creates a series of pages with an analog clock. Here is that example converted into PHP using the ClibPDF extension: Example 2. pdfclock example from pdflib 2.0 distribution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
0) { cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0); cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */
cpdf_translate($pdf, $radius + $margin, $radius + $margin); cpdf_save($pdf); cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minute strokes */ cpdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { cpdf_rotate($pdf, 6.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin/3, 0.0); cpdf_stroke($pdf); } cpdf_restore($pdf); cpdf_save($pdf); /* 5 minute strokes */ cpdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { cpdf_rotate($pdf, 30.0);
209
Classes/Objects
/* draw hour hand */ cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime[’minutes’]/60.0) + $ltime[’hours’] 3.0) * 30.0); 48 cpdf_moveto($pdf, -$radius/10, -$radius/20); 49 cpdf_lineto($pdf, $radius/2, 0.0); 50 cpdf_lineto($pdf, -$radius/10, $radius/20); 51 cpdf_closepath($pdf); 52 cpdf_fill($pdf); 53 cpdf_restore($pdf); /* draw minute hand */ cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime[’seconds’]/60.0) + $ltime[’minutes’] 15.0) * 6.0); 58 cpdf_moveto($pdf, -$radius/10, -$radius/20); 59 cpdf_lineto($pdf, $radius * 0.8, 0.0); 60 cpdf_lineto($pdf, -$radius/10, $radius/20); 61 cpdf_closepath($pdf); 62 cpdf_fill($pdf); 63 cpdf_restore($pdf);
64 65 /* draw second hand */ 66 cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); 67 cpdf_setlinewidth($pdf, 2); 68 cpdf_save($pdf); 69 cpdf_rotate($pdf, -(($ltime[’seconds’] - 15.0) * 6.0)); 70 cpdf_moveto($pdf, -$radius/5, 0.0); 71 cpdf_lineto($pdf, $radius, 0.0); 72 cpdf_stroke($pdf); 73 cpdf_restore($pdf); 74 75 /* draw little circle at center */ 76 cpdf_circle($pdf, 0, 0, $radius/30); 77 cpdf_fill($pdf); 78 79 cpdf_restore($pdf); 80 81 cpdf_finalize_page($pdf, $pagecount+1); 82 } 83 84 cpdf_finalize($pdf); 54 55 56 57
38 39 40 41 42 43 44 45 46 47
cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin, 0.0); cpdf_stroke($pdf); } $ltime = getdate();
210
Classes/Objects
85 86 87 88 89
Header("Content-type: application/pdf"); cpdf_output_buffer($pdf); cpdf_close($pdf); ?>
211
cpdf_global_set_document_limits (PHP4 >= 4.0b4)
Sets document limits for any pdf document
void cpdf_global_set_document_limits (int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects)
The cpdf_global_set_document_limits() function sets several document limits. This function has to be called before cpdf_open() to take effect. It sets the limits for any document open afterwards. See also cpdf_open().
cpdf_set_creator (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the creator field in the pdf document
void cpdf_set_creator (string creator)
The cpdf_set_creator() function sets the creator of a pdf document. See also cpdf_set_subject(), cpdf_set_title(), cpdf_set_keywords().
cpdf_set_title (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the title field of the pdf document
void cpdf_set_title (string title)
The cpdf_set_title() function sets the title of a pdf document. See also cpdf_set_subject(), cpdf_set_creator(), cpdf_set_keywords().
cpdf_set_subject (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the subject field of the pdf document
212
ClibPDF
void cpdf_set_subject (string subject)
The cpdf_set_subject() function sets the subject of a pdf document. See also cpdf_set_title(), cpdf_set_creator(), cpdf_set_keywords().
cpdf_set_keywords (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the keywords field of the pdf document
void cpdf_set_keywords (string keywords)
The cpdf_set_keywords() function sets the keywords of a pdf document. See also cpdf_set_title(), cpdf_set_creator(), cpdf_set_subject().
cpdf_open (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Opens a new pdf document
int cpdf_open (int compression, string filename)
The cpdf_open() function opens a new pdf document. The first parameter turns document compression on if it is unequal to 0. The second optional parameter sets the file in which the document is written. If it is omitted the document is created in memory and can either be written into a file with the cpdf_save_to_file() or written to standard output with cpdf_output_buffer().
Note: The return value will be needed in futher versions of ClibPDF as the first parameter in all other functions which are writing to the pdf document. The ClibPDF library takes the filename "-" as a synonym for stdout. If PHP is compiled as an apache module this will not work because the way ClibPDF outputs to stdout does not work with apache. You can solve this problem by skipping the filename and using cpdf_output_buffer() to output the pdf document.
See also cpdf_close(), cpdf_output_buffer().
213
ClibPDF
cpdf_close (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Closes the pdf document
void cpdf_close (int pdf document)
The cpdf_close() function closes the pdf document. This should be the last function even after cpdf_finalize(), cpdf_output_buffer() and cpdf_save_to_file(). See also cpdf_open().
cpdf_page_init (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Starts new page
void cpdf_page_init (int pdf document, int page number, int orientation, double height, double width, double unit)
The cpdf_page_init() function starts a new page with height height and width width. The page has number page number and orientation orientation. orientation can be 0 for portrait and 1 for landscape. The last optional parameter unit sets the unit for the koordinate system. The value should be the number of postscript points per unit. Since one inch is equal to 72 points, a value of 72 would set the unit to one inch. The default is also 72. See also cpdf_set_current_page().
cpdf_finalize_page (PHP3 >= 3.0.10, PHP4 >= 4.0b4)
Ends page
void cpdf_finalize_page (int pdf document, int page number)
The cpdf_finalize_page() function ends the page with page number page number. This function is only for saving memory. A finalized page takes less memory but cannot be modified anymore. See also cpdf_page_init().
214
ClibPDF
cpdf_finalize (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Ends document
void cpdf_finalize (int pdf document)
The cpdf_finalize() function ends the document. You still have to call cpdf_close(). See also cpdf_close().
cpdf_output_buffer (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Outputs the pdf document in memory buffer
void cpdf_output_buffer (int pdf document)
The cpdf_output_buffer() function outputs the pdf document to stdout. The document has to be created in memory which is the case if cpdf_open() has been called with no filename parameter. See also cpdf_open().
cpdf_save_to_file (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Writes the pdf document into a file
void cpdf_save_to_file (int pdf document, string filename)
The cpdf_save_to_file() function outputs the pdf document into a file if it has been created in memory. This function is not needed if the pdf document has been open by specifying a filename as a parameter of cpdf_open(). See also cpdf_output_buffer(), cpdf_open().
cpdf_set_current_page (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Sets current page
215
ClibPDF
void cpdf_set_current_page (int pdf document, int page number)
The cpdf_set_current_page() function set the page on which all operations are performed. One can switch between pages until a page is finished with cpdf_finalize_page(). See also cpdf_finalize_page().
cpdf_begin_text (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Starts text section
void cpdf_begin_text (int pdf document)
The cpdf_begin_text() function starts a text section. It must be ended with cpdf_end_text(). Example 1. Text output
1 2 3 4 5 6
See also cpdf_end_text().
cpdf_end_text (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Ends text section
void cpdf_end_text (int pdf document)
The cpdf_end_text() function ends a text section which was started with cpdf_begin_text(). Example 1. Text output
1 2 3 4 5
216
ClibPDF
6
See also cpdf_begin_text().
cpdf_show (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Output text at current position
void cpdf_show (int pdf document, string text)
The cpdf_show() function outputs the string in text at the current position. See also cpdf_text(), cpdf_begin_text(), cpdf_end_text().
cpdf_show_xy (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Output text at position
void cpdf_show_xy (int pdf document, string text, double x-koor, double y-koor, int mode)
The cpdf_show_xy() function outputs the string text at position with coordinates (x-koor, y-koor). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.
Note: The function cpdf_show_xy() is identical to cpdf_text() without the optional parameters.
See also cpdf_text().
cpdf_text (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Output text with parameters
void cpdf_text (int pdf document, string text, double x-koor, double y-koor, int mode, double orientation, int alignmode)
217
ClibPDF
The cpdf_text() function outputs the string text at position with coordinates (x-koor, y-koor). The optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. The optional parameter orientation is the rotation of the text in degree. The optional parameter alignmode determines how the text is align. See the ClibPDF documentation for possible values. See also cpdf_show_xy().
cpdf_set_font (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Select the current font face and size
void cpdf_set_font (int pdf document, string font name, double size, string encoding)
The cpdf_set_font() function sets the the current font face, font size and encoding. Currently only the standard postscript fonts are supported. The last parameter encoding can take the following values: "MacRomanEncoding", "MacExpertEncoding", "WinAnsiEncoding", and "NULL". "NULL" stands for the font’s built-in encoding. See the ClibPDF Manual for more information, especially how to support asian fonts.
cpdf_set_leading (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets distance between text lines
void cpdf_set leading (int pdf document, double distance)
The cpdf_set_leading() function sets the distance between text lines. This will be used if text is output by cpdf_continue_text(). See also cpdf_continue_text().
cpdf_set_text_rendering (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Determines how text is rendered
218
ClibPDF
void cpdf_set_text_rendering (int pdf document, int mode)
The cpdf_set_text_rendering() function determines how text is rendered. The possible values for mode are 0=fill text, 1=stroke text, 2=fill and stroke text, 3=invisible, 4=fill text and add it to cliping path, 5=stroke text and add it to clipping path, 6=fill and stroke text and add it to cliping path, 7=add it to clipping path.
cpdf_set_horiz_scaling (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets horizontal scaling of text
void cpdf_set_horiz_scaling (int pdf document, double scale)
The cpdf_set_horiz_scaling() function sets the horizontal scaling to scale percent.
cpdf_set_text_rise (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the text rise
void cpdf_set_text_rise (int pdf document, double value)
The cpdf_set_text_rise() function sets the text rising to value units.
cpdf_set_text_matrix (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets the text matrix
void cpdf_set_text_matrix (int pdf document, array matrix)
The cpdf_set_text_matrix() function sets a matrix which describes a transformation applied on the current text font.
219
ClibPDF
cpdf_set_text_pos (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets text position
void cpdf_set_text_pos (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_set_text_pos() function sets the position of text for the next cpdf_show() function call. The last optional parameter mode determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_show(), cpdf_text().
cpdf_set_char_spacing (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets character spacing
void cpdf_set_char_spacing (int pdf document, double space)
The cpdf_set_char_spacing() function sets the spacing between characters. See also cpdf_set_word_spacing(), cpdf_set_leading().
cpdf_set_word_spacing (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets spacing between words
void cpdf_set_word_spacing (int pdf document, double space)
The cpdf_set_word_spacing() function sets the spacing between words. See also cpdf_set_char_spacing(), cpdf_set_leading().
220
ClibPDF
cpdf_continue_text (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Output text in next line
void cpdf_continue_text (int pdf document, string text)
The cpdf_continue_text() function outputs the string in text in the next line. See also cpdf_show_xy(), cpdf_text(), cpdf_set_leading(), cpdf_set_text_pos().
cpdf_stringwidth (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Returns width of text in current font
double cpdf_stringwidth (int pdf document, string text)
The cpdf_stringwidth() function returns the width of the string in text. It requires a font to be set before. See also cpdf_set_font().
cpdf_save (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Saves current enviroment
void cpdf_save (int pdf document)
The cpdf_save() function saves the current enviroment. It works like the postscript command gsave. Very useful if you want to translate or rotate an object without effecting other objects. See also cpdf_restore().
cpdf_restore (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Restores formerly saved enviroment
221
ClibPDF
void cpdf_restore (int pdf document)
The cpdf_restore() function restores the enviroment saved with cpdf_save(). It works like the postscript command grestore. Very useful if you want to translate or rotate an object without effecting other objects. Example 1. Save/Restore
1 2 5
See also cpdf_save().
cpdf_translate (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets origin of coordinate system
void cpdf_translate (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_translate() function set the origin of coordinate system to the point (x-koor, y-koor). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.
cpdf_scale (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets scaling
void cpdf_scale (int pdf document, double x-scale, double y-scale)
The cpdf_scale() function set the scaling factor in both directions.
222
ClibPDF
cpdf_rotate (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets rotation
void cpdf_rotate (int pdf document, double angle)
The cpdf_rotate() function set the rotation in degress to angle.
cpdf_setflat (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets flatness
void cpdf_setflat (int pdf document, double value)
The cpdf_setflat() function set the flatness to a value between 0 and 100.
cpdf_setlinejoin (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets linejoin parameter
void cpdf_setlinejoin (int pdf document, long value)
The cpdf_setlinejoin() function set the linejoin parameter between a value of 0 and 2. 0 = miter, 1 = round, 2 = bevel.
cpdf_setlinecap (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets linecap aparameter
void cpdf_setlinecap (int pdf document, int value)
The cpdf_setlinecap() function set the linecap parameter between a value of 0 and 2. 0 = butt end, 1 = round, 2 = projecting square.
223
ClibPDF
cpdf_setmiterlimit (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets miter limit
void cpdf_setmiterlimit (int pdf document, double value)
The cpdf_setmiterlimit() function set the miter limit to a value greater or equal than 1.
cpdf_setlinewidth (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets line width
void cpdf_setlinewidth (int pdf document, double width)
The cpdf_setlinewidth() function set the line width to width.
cpdf_setdash (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets dash pattern
void cpdf_setdash (int pdf document, double white, double black)
The cpdf_setdash() function set the dash pattern white white units and black black units. If both are 0 a solid line is set.
cpdf_newpath (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Starts a new path
void cpdf_newpath (int pdf_document)
The cpdf_newpath() starts a new path on the document given by the pdf_document parameter.
224
ClibPDF
cpdf_moveto (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets current point
void cpdf_moveto (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_moveto() function set the current point to the coordinates x-koor and y-koor. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.
cpdf_rmoveto (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Sets current point
void cpdf_rmoveto (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_rmoveto() function set the current point relative to the coordinates x-koor and y-koor. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_moveto().
cpdf_curveto (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draws a curve
void cpdf_curveto (int pdf document, double x1, double y1, double x2, double y2, double x3, double y3, int mode)
The cpdf_curveto() function draws a Bezier curve from the current point to the point (x3, y3) using (x1, y1) and (x2, y2) as control points.
225
ClibPDF
The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_moveto(), cpdf_rmoveto(), cpdf_rlineto(), cpdf_lineto().
cpdf_lineto (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draws a line
void cpdf_lineto (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_lineto() function draws a line from the current point to the point with coordinates (x-koor, y-koor). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().
cpdf_rlineto (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Draws a line
void cpdf_rlineto (int pdf document, double x-koor, double y-koor, int mode)
The cpdf_rlineto() function draws a line from the current point to the relative point with coordinates (x-koor, y-koor). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_moveto(), cpdf_rmoveto(), cpdf_curveto().
226
ClibPDF
cpdf_circle (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draw a circle
void cpdf_circle (int pdf document, double x-koor, double y-koor, double radius, int mode)
The cpdf_circle() function draws a circle with center at point (x-koor, y-koor) and radius radius. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_arc().
cpdf_arc (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draws an arc
void cpdf_arc (int pdf document, double x-koor, double y-koor, double radius, double start, double end, int mode)
The cpdf_arc() function draws an arc with center at point (x-koor, y-koor) and radius radius, starting at angle start and ending at angle end. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_circle().
cpdf_rect (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draw a rectangle
void cpdf_rect (int pdf document, double x-koor, double y-koor, double width, double height, int mode)
227
ClibPDF
The cpdf_rect() function draws a rectangle with its lower left corner at point (x-koor, y-koor). This width is set to widgth. This height is set to height. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.
cpdf_closepath (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Close path
void cpdf_closepath (int pdf document)
The cpdf_closepath() function closes the current path.
cpdf_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Draw line along path
void cpdf_stroke (int pdf document)
The cpdf_stroke() function draws a line along current path. See also cpdf_closepath(), cpdf_closepath_stroke().
cpdf_closepath_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Close path and draw line along path
void cpdf_closepath_stroke (int pdf document)
The cpdf_closepath_stroke() function is a combination of cpdf_closepath() and cpdf_stroke(). Than clears the path. See also cpdf_closepath(), cpdf_stroke().
228
ClibPDF
cpdf_fill (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Fill current path
void cpdf_fill (int pdf document)
The cpdf_fill() function fills the interior of the current path with the current fill color. See also cpdf_closepath(), cpdf_stroke(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().
cpdf_fill_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Fill and stroke current path
void cpdf_fill_stroke (int pdf document)
The cpdf_fill_stroke() function fills the interior of the current path with the current fill color and draws current path. See also cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().
cpdf_closepath_fill_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Close, fill and stroke current path
void cpdf_closepath_fill_stroke (int pdf document)
The cpdf_closepath_fill_stroke() function closes, fills the interior of the current path with the current fill color and draws current path. See also cpdf_closepath(), cpdf_stroke(), cpdf_fill(), cpdf_setgray_fill(), cpdf_setgray(), cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().
229
ClibPDF
cpdf_clip (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Clips to current path
void cpdf_clip (int pdf document)
The cpdf_clip() function clips all drawing to the current path.
cpdf_setgray_fill (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets filling color to gray value
void cpdf_setgray_fill (int pdf document, double value)
The cpdf_setgray_fill() function sets the current gray value to fill a path. See also cpdf_setrgbcolor_fill().
cpdf_setgray_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets drawing color to gray value
void cpdf_setgray_stroke (int pdf document, double gray value)
The cpdf_setgray_stroke() function sets the current drawing color to the given gray value. See also cpdf_setrgbcolor_stroke().
cpdf_setgray (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets drawing and filling color to gray value
void cpdf_setgray (int pdf document, double gray value)
230
ClibPDF
The cpdf_setgray_stroke() function sets the current drawing and filling color to the given gray value. See also cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().
cpdf_setrgbcolor_fill (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets filling color to rgb color value
void cpdf_setrgbcolor_fill (int pdf document, double red value, double green value, double blue value)
The cpdf_setrgbcolor_fill() function sets the current rgb color value to fill a path. See also cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor().
cpdf_setrgbcolor_stroke (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets drawing color to rgb color value
void cpdf_setrgbcolor_stroke (int pdf document, double red value, double green value, double blue value)
The cpdf_setrgbcolor_stroke() function sets the current drawing color to the given rgb color value. See also cpdf_setrgbcolor_fill(), cpdf_setrgbcolor().
cpdf_setrgbcolor (PHP3 >= 3.0.8, PHP4 >= 4.0b4)
Sets drawing and filling color to rgb color value
void cpdf_setrgbcolor (int pdf document, double red value, double green value, double blue value)
The cpdf_setrgbcolor_stroke() function sets the current drawing and filling color to the given rgb color value. See also cpdf_setrgbcolor_stroke(), cpdf_setrgbcolor_fill().
231
ClibPDF
cpdf_add_outline (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Adds bookmark for current page
void cpdf_add_outline (int pdf document, string text)
The cpdf_add_outline() function adds a bookmark with text text that points to the current page. Example 1. Adding a page outline
1 2 3 4 5 6 7 8 9 10 11 12 13 14
cpdf_set_page_animation (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Sets duration between pages
void cpdf_set_page_animation (int pdf document, int transition, double duration)
The cpdf_set_page_animation() function set the transition between following pages. The value of transition can be 0 for none, 1 for two lines sweeping across the screen reveal the page, 2 for multiple lines sweeping across the screen reveal the page, 3 for a box reveals the page,
232
ClibPDF
4 for a single line sweeping across the screen reveals the page, 5 for the old page dissolves to reveal the page, 6 for the dissolve effect moves from one screen edge to another, 7 for the old page is simply replaced by the new page (default) The value of duration is the number of seconds between page flipping.
cpdf_import_jpeg (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Opens a JPEG image
int cpdf_open_jpeg (int pdf document, string file name, double x-koor, double y-koor, double angle, double width, double height, double x-scale, double y-scale, int mode)
The cpdf_import_jpeg() function opens an image stored in the file with the name file name. The format of the image has to be jpeg. The image is placed on the current page at position (x-koor, y-koor). The image is rotated by angle degres. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_place_inline_image(),
cpdf_place_inline_image (PHP3 >= 3.0.9, PHP4 >= 4.0b4)
Places an image on the page
void cpdf_place_inline_image (int pdf document, int image, double x-koor, double y-koor, double angle, double width, double height, int mode)
The cpdf_place_inline_image() function places an image created with the php image functions on the page at postion (x-koor, y-koor). The image can be scaled at the same time. The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit. See also cpdf_import_jpeg(),
233
ClibPDF
cpdf_add_annotation (PHP3 >= 3.0.12, PHP4 >= 4.0b4)
Adds annotation
void cpdf_add_annotation (int pdf document, double llx, double lly, double urx, double ury, string title, string content, int mode)
The cpdf_add_annotation() adds a note with the lower left corner at (llx, lly) and the upper right corner at (urx, ury). The last optional parameter determines the unit length. If is 0 or omitted the default unit as specified for the page is used. Otherwise the koodinates are measured in postscript points disregarding the current unit.
234
IX. Cybercash payment functions
These functions are only available if the interpreter has been compiled with the --with-cybercash=[DIR]. These functions have been added in PHP4.
235
cybercash_encr (PHP4 >= 4.0b4)
???
array cybercash_encr (string wmk, string sk, string inbuff)
The function returns an associative array with the elements "errcode" and, if "errcode" is false, "outbuff" (string), "outLth" (long) and "macbuff" (string).
cybercash_decr (PHP4 >= 4.0b4)
???
array cybercash_decr (string wmk, string sk, string inbuff)
The function returns an associative array with the elements "errcode" and, if "errcode" is false, "outbuff" (string), "outLth" (long) and "macbuff" (string).
cybercash_base64_encode (PHP4 >= 4.0b4)
???
string cybercash_base64_encode (string inbuff)
cybercash_base64_decode (PHP4 >= 4.0b4)
string cybercash_base64_decode (string inbuff)
236
X. DOM XML functions
These functions are only available if PHP was configured with --with-dom=[DIR], using the GNOME xml library. You will need at least libxml-2.0.0 (the beta version will not work). These functions have been added in PHP4. This module defines the following constants: Table 1. XML constants Constant XML_ELEMENT_NODE XML_ATTRIBUTE_NODE XML_TEXT_NODE Value 1 2 3 Description
4 XML_CDATA_SECTION_NODE XML_ENTITY_REF_NODE XML_ENTITY_NODE XML_PI_NODE XML_COMMENT_NODE XML_DOCUMENT_NODE 5 6 7 8 9
10 XML_DOCUMENT_TYPE_NODE 11 XML_DOCUMENT_FRAG_NODE XML_NOTATION_NODE 12
XML_GLOBAL_NAMESPACE 1 XML_LOCAL_NAMESPACE 2
This module defines a number of classes. The DOM XML functions return a parsed tree of the XML document with each node being an object belonging to one of these classes.
237
xmldoc (PHP4 >= 4.0b4)
Creates a DOM object of an XML document
object xmldoc (string str)
The function parses the XML document in str and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string) and "type" (long).
xmldocfile (PHP4 >= 4.0b4)
Creates a DOM object from XML file
object xmldocfile (string filename)
The function parses the XML document in the file named filename and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string).
xmltree (PHP4 >= 4.0b4)
Creates a tree of php objects from XML document
object xmltree (string str)
The function parses the XML document in str and returns a tree PHP objects as the parsed document.
238
XI. Compression functions
This module uses the functions of zlib (http://www.cdrom.com/pub/infozip/zlib/) by Jean-loup Gailly and Mark Adler to transparently read and write gzip (.gz) compressed files. You have to use a zlib version >= 1.0.9 with this module. This module contains versions of most of the filesystem functions which work with gzip-compressed files (and uncompressed files, too, but not with sockets).
Small code example
Opens a temporary file and writes a test string to it, then it prints out the content of this file twice. Example 1. Small Zlib example
1 2 \n\n\n\n"; 5 $s = "Only a test, test, test, test, test, test, test, test!\n"; 6 // open file for writing with maximum compression 7 $zp = gzopen($filename, "w9"); 8 // write string to file 9 gzwrite($zp, $s); 10 // close file 11 gzclose($zp); 12 // open file for reading 13 $zp = gzopen($filename, "r"); 14 // read 3 char 15 print gzread($zp, 3); 16 // output until end of the file and close it. 17 gzpassthru($zp); 18 print "\n"; 19 // open file and print content (the 2nd time). 20 if (readgzfile($filename) != strlen($s)) { 21 echo "Error with zlib functions!"; 22 } 23 unlink($filename); 24 print "\n\n